@jvsoft/components 1.0.0-alpha.5 → 1.0.0-alpha.7

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Output, Input, Component, HostListener, Directive, ViewChild, Optional, inject, Pipe, NgModule, ContentChildren, ViewChildren, Injectable, ElementRef, HostBinding } from '@angular/core';
2
+ import { input, booleanAttribute, output, computed, Component, EventEmitter, HostListener, Output, Input, Directive, ViewChild, Optional, inject, Pipe, NgModule, ContentChildren, ViewChildren, Injectable, ElementRef, HostBinding, signal, effect, untracked } from '@angular/core';
3
3
  import * as i3 from '@angular/material/dialog';
4
4
  import { MatDialogModule } from '@angular/material/dialog';
5
5
  import * as i4 from '@angular/material/icon';
@@ -33,7 +33,7 @@ import { MatTooltipModule } from '@angular/material/tooltip';
33
33
  import { untilDestroyed, UntilDestroy } from '@ngneat/until-destroy';
34
34
  import moment from 'moment';
35
35
  import { Subject, takeUntil, startWith, of, fromEvent } from 'rxjs';
36
- import { filter, map, take } from 'rxjs/operators';
36
+ import { filter, map, take, switchMap } from 'rxjs/operators';
37
37
  import shortHash from 'shorthash2';
38
38
  import * as i1$1 from '@angular/platform-browser';
39
39
  import { DomSanitizer } from '@angular/platform-browser';
@@ -44,84 +44,72 @@ import * as i3$2 from '@angular/material/tree';
44
44
  import { MatTreeModule } from '@angular/material/tree';
45
45
  import { NestedTreeControl } from '@angular/cdk/tree';
46
46
  import { DataModel as DataModel$1 } from '@jvsoft/utils';
47
+ import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
47
48
 
48
49
  class DialogFlotanteComponent {
49
- cssClases = {};
50
- _sinTitulo = false;
51
- get sinTitulo() {
52
- return !!this._sinTitulo;
53
- }
54
- set sinTitulo(val) {
55
- this._sinTitulo = val == '';
56
- }
57
- _sinBarraDeAccion = false;
58
- get sinBarraDeAccion() {
59
- return !!this._sinBarraDeAccion;
60
- }
61
- set sinBarraDeAccion(val) {
62
- this._sinBarraDeAccion = val == '';
63
- }
50
+ cssClases = input({});
51
+ sinTitulo = input(false, { transform: booleanAttribute });
52
+ sinBarraDeAccion = input(false, { transform: booleanAttribute });
53
+ btnCerrarBarra = input(false, { transform: booleanAttribute });
54
+ iconoTitulo = input(undefined);
55
+ matDialogRefActual = input(undefined);
56
+ // Inputs crudos para botones (string | boolean | object)
57
+ btnGuardarInput = input(undefined, { alias: 'btnGuardar' });
58
+ btnCerrarInput = input(undefined, { alias: 'btnCerrar' });
59
+ btnGuardarClick = output();
60
+ btnCerrarClick = output();
64
61
  defaultBtnCerrar = { label: 'CERRAR', class: 'text-gray-700 border-gray-700' };
65
- _btnCerrar = this.defaultBtnCerrar;
66
- get btnCerrar() {
67
- return this._btnCerrar;
68
- }
69
- set btnCerrar(val) {
70
- if (val == null || val === '') {
71
- this._btnCerrar = this.defaultBtnCerrar;
72
- }
73
- else {
74
- this._btnCerrar = (typeof val === 'string' && val !== '') ? { ...this.defaultBtnCerrar, label: val } :
75
- (typeof val === 'boolean' && val) ? this.defaultBtnCerrar :
76
- val ?? this.defaultBtnCerrar;
77
- }
78
- }
79
- _btnCerrarBarra = true;
80
- get btnCerrarBarra() {
81
- return this._btnCerrarBarra;
82
- }
83
- set btnCerrarBarra(val) {
84
- this._btnCerrarBarra = val || true;
85
- }
86
62
  defaultBtnGuardar = {
87
63
  label: 'GUARDAR', class: 'text-blue-700 border-blue-700', icono: 'roundSave'
88
64
  };
89
- _btnGuardar = this.defaultBtnGuardar;
90
- get btnGuardar() {
91
- return this._btnGuardar;
92
- }
93
- set btnGuardar(val) {
94
- if (val == null || val === '') {
95
- this._btnGuardar = this.defaultBtnGuardar;
96
- }
97
- else {
98
- this._btnGuardar = (typeof val === 'string' && val !== '') ? { ...this.defaultBtnGuardar, label: val } :
99
- (typeof val === 'boolean' && val) ? this.defaultBtnGuardar :
100
- val ?? this.defaultBtnGuardar;
101
- }
102
- }
103
- iconoTitulo;
104
- matDialogRefActual;
105
- btnGuardarClick = new EventEmitter();
106
- btnCerrarClick = new EventEmitter();
65
+ // Computed signals para normalizar la configuración de botones
66
+ btnCerrar = computed(() => {
67
+ const val = this.btnCerrarInput();
68
+ // Si es false, null o undefined -> NO MOSTRAR
69
+ if (val === false || val === null || val === undefined)
70
+ return undefined;
71
+ // Si es string vacío (atributo presente sin valor) o true -> MOSTRAR DEFAULT
72
+ if (val === '' || val === true)
73
+ return this.defaultBtnCerrar;
74
+ // Si es string con valor -> MOSTRAR DEFAULT CON LABEL
75
+ if (typeof val === 'string')
76
+ return { ...this.defaultBtnCerrar, label: val };
77
+ // Si es objeto -> USAR EL OBJETO
78
+ return val;
79
+ });
80
+ btnGuardar = computed(() => {
81
+ const val = this.btnGuardarInput();
82
+ // Si es false, null o undefined -> NO MOSTRAR
83
+ if (val === false || val === null || val === undefined)
84
+ return undefined;
85
+ // Si es string vacío (atributo presente sin valor) o true -> MOSTRAR DEFAULT
86
+ if (val === '' || val === true)
87
+ return this.defaultBtnGuardar;
88
+ // Si es string con valor -> MOSTRAR DEFAULT CON LABEL
89
+ if (typeof val === 'string')
90
+ return { ...this.defaultBtnGuardar, label: val };
91
+ // Si es objeto -> USAR EL OBJETO
92
+ return val;
93
+ });
107
94
  guardarDialogo() {
108
95
  this.btnGuardarClick.emit(true);
109
96
  }
110
97
  cerrarDialogo() {
111
98
  this.btnCerrarClick.emit(true);
112
- if (this.matDialogRefActual) {
113
- if (this.matDialogRefActual.componentInstance?.validarCerrarDialog) {
114
- this.matDialogRefActual.componentInstance?.validarCerrarDialog();
99
+ const ref = this.matDialogRefActual();
100
+ if (ref) {
101
+ if (ref.componentInstance?.validarCerrarDialog) {
102
+ ref.componentInstance?.validarCerrarDialog();
115
103
  }
116
104
  else {
117
- this.matDialogRefActual.close('Cerrado GDLG');
105
+ ref.close('Cerrado GDLG');
118
106
  }
119
107
  }
120
108
  }
121
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: DialogFlotanteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", type: DialogFlotanteComponent, isStandalone: true, selector: "[jvsDialogFlotante]", inputs: { cssClases: "cssClases", sinTitulo: "sinTitulo", sinBarraDeAccion: "sinBarraDeAccion", btnCerrar: "btnCerrar", btnCerrarBarra: "btnCerrarBarra", btnGuardar: "btnGuardar", iconoTitulo: "iconoTitulo", matDialogRefActual: "matDialogRefActual" }, outputs: { btnGuardarClick: "btnGuardarClick", btnCerrarClick: "btnCerrarClick" }, host: { classAttribute: "jvs-dialog-flotante" }, ngImport: i0, template: "<ng-container *ngIf=\"sinTitulo; else conTitulo\">\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n</ng-container>\n\n<ng-template #conTitulo>\n <div cdkDrag class=\"block h-full\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDragBoundary=\"body\">\n <div class=\"flex-auto flex items-center justify-between hover:cursor-move gap-1\"\n [ngClass]=\"cssClases['titulo'] ?? 'bg-primary text-primary-contrast'\"\n mat-dialog-title cdkDragHandle>\n\n <mat-icon *ngIf=\"iconoTitulo\" class=\"flex-none icon-xs\" [svgIcon]=\"iconoTitulo\"></mat-icon>\n <ng-content select=\"[tituloImagen]\"></ng-content>\n <h5 class=\"flex-1 m-0\">\n <ng-content select=\"[titulo]\"></ng-content>\n </h5>\n <ng-content select=\"[selectTitulo]\"></ng-content>\n\n <ng-container *ngIf=\"btnCerrar || btnCerrarBarra\">\n <button matRipple class=\"flex items-center justify-center ml-2 h-6 w-6 bg-red-700 rounded-md text-white\"\n type=\"button\" [mat-dialog-close]=\"!matDialogRefActual\"\n (click)=\"matDialogRefActual ? cerrarDialogo() : null\">\n <mat-icon svgIcon=\"roundClose\"></mat-icon>\n </button>\n </ng-container>\n </div>\n\n <mat-divider class=\"flex-auto bg-primary\"></mat-divider>\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #parteComun>\n <mat-dialog-content class=\"flex-1\">\n <div class=\"contenedor-cuerpo\">\n <ng-content select=\"[cuerpo]\"></ng-content>\n </div>\n </mat-dialog-content>\n\n <mat-dialog-actions class=\"flex-auto flex items-center justify-between gap-1 pt-0 mt-0\" *ngIf=\"!sinBarraDeAccion\">\n <div class=\"flex items-start justify-start gap-1\">\n <ng-content select=\"[pieIzquierda]\"></ng-content>\n </div>\n <div class=\"flex items-center justify-center gap-1\">\n <ng-content select=\"[pieCentro]\"></ng-content>\n </div>\n <div class=\"flex items-end justify-end gap-1\">\n <ng-content select=\"[pieDerecha]\"></ng-content>\n\n <!-- Bot\u00F3n Guardar -->\n <button matRipple *ngIf=\"btnGuardar\" type=\"submit\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnGuardar.class\"\n [class]=\"cssClases['btnGuardar']\" (click)=\"guardarDialogo()\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"btnGuardar?.icono ?? ''\"></mat-icon>\n <span>{{ btnGuardar.label }}</span>\n </button>\n\n <!-- Bot\u00F3n Cerrar -->\n <button matRipple *ngIf=\"btnCerrar\" type=\"button\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnCerrar.class\"\n [mat-dialog-close]=\"!matDialogRefActual\" (click)=\"matDialogRefActual ? cerrarDialogo() : null\">\n <mat-icon class=\"icon-xs\" svgIcon=\"roundClose\"></mat-icon>\n <span>{{ btnCerrar.label }}</span>\n </button>\n </div>\n </mat-dialog-actions>\n</ng-template>\n", styles: [".jvs-dialog-flotante{max-width:98vw}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-form-field{color:unset}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-checkbox__native-control:enabled:focus:focus:not(:checked):not(:indeterminate)~.mdc-checkbox__background{border-color:var(--color-prnpx tailwindcss init --fullimary-contrast)!important}.jvs-dialog-flotante fieldset{@apply w-full sm:w-auto rounded-sm bg-transparent pt-0 pb-1 px-1 border;}.jvs-dialog-flotante fieldset legend{@apply px-2 font-bold border-0 bg-transparent;width:auto}\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: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }] });
109
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DialogFlotanteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
110
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.14", type: DialogFlotanteComponent, isStandalone: true, selector: "[jvsDialogFlotante]", inputs: { cssClases: { classPropertyName: "cssClases", publicName: "cssClases", isSignal: true, isRequired: false, transformFunction: null }, sinTitulo: { classPropertyName: "sinTitulo", publicName: "sinTitulo", isSignal: true, isRequired: false, transformFunction: null }, sinBarraDeAccion: { classPropertyName: "sinBarraDeAccion", publicName: "sinBarraDeAccion", isSignal: true, isRequired: false, transformFunction: null }, btnCerrarBarra: { classPropertyName: "btnCerrarBarra", publicName: "btnCerrarBarra", isSignal: true, isRequired: false, transformFunction: null }, iconoTitulo: { classPropertyName: "iconoTitulo", publicName: "iconoTitulo", isSignal: true, isRequired: false, transformFunction: null }, matDialogRefActual: { classPropertyName: "matDialogRefActual", publicName: "matDialogRefActual", isSignal: true, isRequired: false, transformFunction: null }, btnGuardarInput: { classPropertyName: "btnGuardarInput", publicName: "btnGuardar", isSignal: true, isRequired: false, transformFunction: null }, btnCerrarInput: { classPropertyName: "btnCerrarInput", publicName: "btnCerrar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { btnGuardarClick: "btnGuardarClick", btnCerrarClick: "btnCerrarClick" }, host: { classAttribute: "jvs-dialog-flotante" }, ngImport: i0, template: "<ng-container *ngIf=\"sinTitulo(); else conTitulo\">\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n</ng-container>\n\n<ng-template #conTitulo>\n <div cdkDrag class=\"block h-full\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDragBoundary=\"body\">\n <div class=\"flex-auto flex items-center justify-between hover:cursor-move gap-1\"\n [ngClass]=\"cssClases()['titulo'] ?? 'bg-primary text-primary-contrast'\"\n mat-dialog-title cdkDragHandle>\n\n <mat-icon *ngIf=\"iconoTitulo()\" class=\"flex-none icon-xs\" [svgIcon]=\"iconoTitulo()!\"></mat-icon>\n <ng-content select=\"[tituloImagen]\"></ng-content>\n <h5 class=\"flex-1 m-0\">\n <ng-content select=\"[titulo]\"></ng-content>\n </h5>\n <ng-content select=\"[selectTitulo]\"></ng-content>\n\n <ng-container *ngIf=\"btnCerrar() || btnCerrarBarra()\">\n <button matRipple class=\"flex items-center justify-center ml-2 h-6 w-6 bg-red-700 rounded-md text-white\"\n type=\"button\" [mat-dialog-close]=\"!matDialogRefActual()\"\n (click)=\"matDialogRefActual() ? cerrarDialogo() : null\">\n <mat-icon svgIcon=\"roundClose\"></mat-icon>\n </button>\n </ng-container>\n </div>\n\n <mat-divider class=\"flex-auto bg-primary\"></mat-divider>\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #parteComun>\n <mat-dialog-content class=\"flex-1\">\n <div class=\"contenedor-cuerpo\">\n <ng-content select=\"[cuerpo]\"></ng-content>\n </div>\n </mat-dialog-content>\n\n <mat-dialog-actions class=\"flex-auto flex items-center justify-between gap-1 pt-0 mt-0\" *ngIf=\"!sinBarraDeAccion()\">\n <div class=\"flex items-start justify-start gap-1\">\n <ng-content select=\"[pieIzquierda]\"></ng-content>\n </div>\n <div class=\"flex items-center justify-center gap-1\">\n <ng-content select=\"[pieCentro]\"></ng-content>\n </div>\n <div class=\"flex items-end justify-end gap-1\">\n <ng-content select=\"[pieDerecha]\"></ng-content>\n\n <!-- Bot\u00F3n Guardar -->\n <button matRipple *ngIf=\"btnGuardar()\" type=\"submit\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnGuardar()!.class\"\n [class]=\"cssClases()['btnGuardar']\" (click)=\"guardarDialogo()\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"btnGuardar()?.icono ?? ''\"></mat-icon>\n <span>{{ btnGuardar()!.label }}</span>\n </button>\n\n <!-- Bot\u00F3n Cerrar -->\n <button matRipple *ngIf=\"btnCerrar()\" type=\"button\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnCerrar()!.class\"\n [mat-dialog-close]=\"!matDialogRefActual()\" (click)=\"matDialogRefActual() ? cerrarDialogo() : null\">\n <mat-icon class=\"icon-xs\" svgIcon=\"roundClose\"></mat-icon>\n <span>{{ btnCerrar()!.label }}</span>\n </button>\n </div>\n </mat-dialog-actions>\n</ng-template>\n", styles: [".jvs-dialog-flotante{max-width:98vw}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-form-field{color:unset}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-checkbox__native-control:enabled:focus:focus:not(:checked):not(:indeterminate)~.mdc-checkbox__background{border-color:var(--color-prnpx tailwindcss init --fullimary-contrast)!important}.jvs-dialog-flotante fieldset{@apply w-full sm:w-auto rounded-sm bg-transparent pt-0 pb-1 px-1 border;}.jvs-dialog-flotante fieldset legend{@apply px-2 font-bold border-0 bg-transparent;width:auto}\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: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }] });
123
111
  }
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: DialogFlotanteComponent, decorators: [{
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DialogFlotanteComponent, decorators: [{
125
113
  type: Component,
126
114
  args: [{ selector: '[jvsDialogFlotante]', imports: [
127
115
  CommonModule,
@@ -133,28 +121,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImpo
133
121
  MatDivider,
134
122
  ], host: {
135
123
  class: 'jvs-dialog-flotante',
136
- }, template: "<ng-container *ngIf=\"sinTitulo; else conTitulo\">\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n</ng-container>\n\n<ng-template #conTitulo>\n <div cdkDrag class=\"block h-full\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDragBoundary=\"body\">\n <div class=\"flex-auto flex items-center justify-between hover:cursor-move gap-1\"\n [ngClass]=\"cssClases['titulo'] ?? 'bg-primary text-primary-contrast'\"\n mat-dialog-title cdkDragHandle>\n\n <mat-icon *ngIf=\"iconoTitulo\" class=\"flex-none icon-xs\" [svgIcon]=\"iconoTitulo\"></mat-icon>\n <ng-content select=\"[tituloImagen]\"></ng-content>\n <h5 class=\"flex-1 m-0\">\n <ng-content select=\"[titulo]\"></ng-content>\n </h5>\n <ng-content select=\"[selectTitulo]\"></ng-content>\n\n <ng-container *ngIf=\"btnCerrar || btnCerrarBarra\">\n <button matRipple class=\"flex items-center justify-center ml-2 h-6 w-6 bg-red-700 rounded-md text-white\"\n type=\"button\" [mat-dialog-close]=\"!matDialogRefActual\"\n (click)=\"matDialogRefActual ? cerrarDialogo() : null\">\n <mat-icon svgIcon=\"roundClose\"></mat-icon>\n </button>\n </ng-container>\n </div>\n\n <mat-divider class=\"flex-auto bg-primary\"></mat-divider>\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #parteComun>\n <mat-dialog-content class=\"flex-1\">\n <div class=\"contenedor-cuerpo\">\n <ng-content select=\"[cuerpo]\"></ng-content>\n </div>\n </mat-dialog-content>\n\n <mat-dialog-actions class=\"flex-auto flex items-center justify-between gap-1 pt-0 mt-0\" *ngIf=\"!sinBarraDeAccion\">\n <div class=\"flex items-start justify-start gap-1\">\n <ng-content select=\"[pieIzquierda]\"></ng-content>\n </div>\n <div class=\"flex items-center justify-center gap-1\">\n <ng-content select=\"[pieCentro]\"></ng-content>\n </div>\n <div class=\"flex items-end justify-end gap-1\">\n <ng-content select=\"[pieDerecha]\"></ng-content>\n\n <!-- Bot\u00F3n Guardar -->\n <button matRipple *ngIf=\"btnGuardar\" type=\"submit\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnGuardar.class\"\n [class]=\"cssClases['btnGuardar']\" (click)=\"guardarDialogo()\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"btnGuardar?.icono ?? ''\"></mat-icon>\n <span>{{ btnGuardar.label }}</span>\n </button>\n\n <!-- Bot\u00F3n Cerrar -->\n <button matRipple *ngIf=\"btnCerrar\" type=\"button\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnCerrar.class\"\n [mat-dialog-close]=\"!matDialogRefActual\" (click)=\"matDialogRefActual ? cerrarDialogo() : null\">\n <mat-icon class=\"icon-xs\" svgIcon=\"roundClose\"></mat-icon>\n <span>{{ btnCerrar.label }}</span>\n </button>\n </div>\n </mat-dialog-actions>\n</ng-template>\n", styles: [".jvs-dialog-flotante{max-width:98vw}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-form-field{color:unset}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-checkbox__native-control:enabled:focus:focus:not(:checked):not(:indeterminate)~.mdc-checkbox__background{border-color:var(--color-prnpx tailwindcss init --fullimary-contrast)!important}.jvs-dialog-flotante fieldset{@apply w-full sm:w-auto rounded-sm bg-transparent pt-0 pb-1 px-1 border;}.jvs-dialog-flotante fieldset legend{@apply px-2 font-bold border-0 bg-transparent;width:auto}\n"] }]
137
- }], propDecorators: { cssClases: [{
138
- type: Input
139
- }], sinTitulo: [{
140
- type: Input
141
- }], sinBarraDeAccion: [{
142
- type: Input
143
- }], btnCerrar: [{
144
- type: Input
145
- }], btnCerrarBarra: [{
146
- type: Input
147
- }], btnGuardar: [{
148
- type: Input
149
- }], iconoTitulo: [{
150
- type: Input
151
- }], matDialogRefActual: [{
152
- type: Input
153
- }], btnGuardarClick: [{
154
- type: Output
155
- }], btnCerrarClick: [{
156
- type: Output
157
- }] } });
124
+ }, template: "<ng-container *ngIf=\"sinTitulo(); else conTitulo\">\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n</ng-container>\n\n<ng-template #conTitulo>\n <div cdkDrag class=\"block h-full\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDragBoundary=\"body\">\n <div class=\"flex-auto flex items-center justify-between hover:cursor-move gap-1\"\n [ngClass]=\"cssClases()['titulo'] ?? 'bg-primary text-primary-contrast'\"\n mat-dialog-title cdkDragHandle>\n\n <mat-icon *ngIf=\"iconoTitulo()\" class=\"flex-none icon-xs\" [svgIcon]=\"iconoTitulo()!\"></mat-icon>\n <ng-content select=\"[tituloImagen]\"></ng-content>\n <h5 class=\"flex-1 m-0\">\n <ng-content select=\"[titulo]\"></ng-content>\n </h5>\n <ng-content select=\"[selectTitulo]\"></ng-content>\n\n <ng-container *ngIf=\"btnCerrar() || btnCerrarBarra()\">\n <button matRipple class=\"flex items-center justify-center ml-2 h-6 w-6 bg-red-700 rounded-md text-white\"\n type=\"button\" [mat-dialog-close]=\"!matDialogRefActual()\"\n (click)=\"matDialogRefActual() ? cerrarDialogo() : null\">\n <mat-icon svgIcon=\"roundClose\"></mat-icon>\n </button>\n </ng-container>\n </div>\n\n <mat-divider class=\"flex-auto bg-primary\"></mat-divider>\n <ng-container [ngTemplateOutlet]=\"parteComun\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #parteComun>\n <mat-dialog-content class=\"flex-1\">\n <div class=\"contenedor-cuerpo\">\n <ng-content select=\"[cuerpo]\"></ng-content>\n </div>\n </mat-dialog-content>\n\n <mat-dialog-actions class=\"flex-auto flex items-center justify-between gap-1 pt-0 mt-0\" *ngIf=\"!sinBarraDeAccion()\">\n <div class=\"flex items-start justify-start gap-1\">\n <ng-content select=\"[pieIzquierda]\"></ng-content>\n </div>\n <div class=\"flex items-center justify-center gap-1\">\n <ng-content select=\"[pieCentro]\"></ng-content>\n </div>\n <div class=\"flex items-end justify-end gap-1\">\n <ng-content select=\"[pieDerecha]\"></ng-content>\n\n <!-- Bot\u00F3n Guardar -->\n <button matRipple *ngIf=\"btnGuardar()\" type=\"submit\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnGuardar()!.class\"\n [class]=\"cssClases()['btnGuardar']\" (click)=\"guardarDialogo()\">\n <mat-icon class=\"icon-xs\" [svgIcon]=\"btnGuardar()?.icono ?? ''\"></mat-icon>\n <span>{{ btnGuardar()!.label }}</span>\n </button>\n\n <!-- Bot\u00F3n Cerrar -->\n <button matRipple *ngIf=\"btnCerrar()\" type=\"button\"\n class=\"boton-dialog-flotante\" [ngClass]=\"btnCerrar()!.class\"\n [mat-dialog-close]=\"!matDialogRefActual()\" (click)=\"matDialogRefActual() ? cerrarDialogo() : null\">\n <mat-icon class=\"icon-xs\" svgIcon=\"roundClose\"></mat-icon>\n <span>{{ btnCerrar()!.label }}</span>\n </button>\n </div>\n </mat-dialog-actions>\n</ng-template>\n", styles: [".jvs-dialog-flotante{max-width:98vw}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-form-field{color:unset}.jvs-dialog-flotante .mat-mdc-dialog-title .mat-mdc-checkbox .mdc-checkbox__native-control:enabled:focus:focus:not(:checked):not(:indeterminate)~.mdc-checkbox__background{border-color:var(--color-prnpx tailwindcss init --fullimary-contrast)!important}.jvs-dialog-flotante fieldset{@apply w-full sm:w-auto rounded-sm bg-transparent pt-0 pb-1 px-1 border;}.jvs-dialog-flotante fieldset legend{@apply px-2 font-bold border-0 bg-transparent;width:auto}\n"] }]
125
+ }] });
158
126
 
159
127
  function buscarEnArray(coleccion, idBuscar, dato) {
160
128
  if (!Array.isArray(coleccion) || coleccion.length === 0)
@@ -416,10 +384,10 @@ class MatRowKeyboardSelectionDirective {
416
384
  }
417
385
  return undefined;
418
386
  }
419
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: MatRowKeyboardSelectionDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
420
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.16", type: MatRowKeyboardSelectionDirective, isStandalone: true, selector: "[matRowKeyboardSelection]", inputs: { tabla: ["matRowKeyboardSelection", "tabla"], rowModel: "rowModel" }, outputs: { seleccionarSiguiente: "seleccionarSiguiente" }, host: { listeners: { "keydown": "onKeydown($event)" } }, ngImport: i0 });
387
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MatRowKeyboardSelectionDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
388
+ 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 });
421
389
  }
422
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: MatRowKeyboardSelectionDirective, decorators: [{
390
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MatRowKeyboardSelectionDirective, decorators: [{
423
391
  type: Directive,
424
392
  args: [{
425
393
  selector: '[matRowKeyboardSelection]'
@@ -460,10 +428,10 @@ class ColumnTypeComponent {
460
428
  }
461
429
  return false;
462
430
  }
463
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeComponent, deps: [{ token: i2.MatTable, optional: true }], target: i0.ɵɵFactoryTarget.Component });
464
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }] });
431
+ 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 });
432
+ 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$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }] });
465
433
  }
466
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeComponent, decorators: [{
434
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeComponent, decorators: [{
467
435
  type: Component,
468
436
  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" }]
469
437
  }], ctorParameters: () => [{ type: i2.MatTable, decorators: [{
@@ -484,10 +452,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImpo
484
452
 
485
453
  class ColumnTypeNumberComponent extends ColumnTypeComponent {
486
454
  column = {};
487
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeNumberComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
488
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] });
455
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeNumberComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
456
+ 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$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] });
489
457
  }
490
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeNumberComponent, decorators: [{
458
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeNumberComponent, decorators: [{
491
459
  type: Component,
492
460
  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" }]
493
461
  }], propDecorators: { column: [{
@@ -497,10 +465,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImpo
497
465
 
498
466
  class ColumnTypeDateComponent extends ColumnTypeComponent {
499
467
  column = {};
500
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeDateComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
501
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
468
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeDateComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
469
+ 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$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
502
470
  }
503
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeDateComponent, decorators: [{
471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeDateComponent, decorators: [{
504
472
  type: Component,
505
473
  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" }]
506
474
  }], propDecorators: { column: [{
@@ -528,10 +496,10 @@ class ColumnTypeSinoComponent extends ColumnTypeComponent {
528
496
  // iconRegistry.addSvgIconLiteral('yesIcon', sanitizer.bypassSecurityTrustHtml(YES_ICON));
529
497
  // iconRegistry.addSvgIconLiteral('noIcon', sanitizer.bypassSecurityTrustHtml(NO_ICON));
530
498
  }
531
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeSinoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
532
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
499
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeSinoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
500
+ 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$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
533
501
  }
534
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeSinoComponent, decorators: [{
502
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeSinoComponent, decorators: [{
535
503
  type: Component,
536
504
  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" }]
537
505
  }], ctorParameters: () => [], propDecorators: { column: [{
@@ -592,10 +560,10 @@ class ProgressBarComponent {
592
560
  }
593
561
  return objData.sort((a, b) => (a[propiedad] > b[propiedad]) ? 1 : ((b[propiedad] > a[propiedad]) ? -1 : 0));
594
562
  }
595
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
596
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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" }] });
563
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
564
+ 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" }] });
597
565
  }
598
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ProgressBarComponent, decorators: [{
566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProgressBarComponent, decorators: [{
599
567
  type: Component,
600
568
  args: [{ selector: 'jvs-progress-bar', imports: [
601
569
  CommonModule,
@@ -619,10 +587,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImpo
619
587
 
620
588
  class ColumnTypeProgressbarComponent extends ColumnTypeComponent {
621
589
  column = {};
622
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeProgressbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
623
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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$1.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"] }] });
590
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeProgressbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
591
+ 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$1.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"] }] });
624
592
  }
625
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeProgressbarComponent, decorators: [{
593
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeProgressbarComponent, decorators: [{
626
594
  type: Component,
627
595
  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" }]
628
596
  }], propDecorators: { column: [{
@@ -638,10 +606,10 @@ class NoSanitizePipe {
638
606
  transform(html) {
639
607
  return this.domSanitizer.bypassSecurityTrustHtml(html);
640
608
  }
641
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: NoSanitizePipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
642
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.16", ngImport: i0, type: NoSanitizePipe, isStandalone: true, name: "noSanitize" });
609
+ 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 });
610
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: NoSanitizePipe, isStandalone: true, name: "noSanitize" });
643
611
  }
644
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: NoSanitizePipe, decorators: [{
612
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NoSanitizePipe, decorators: [{
645
613
  type: Pipe,
646
614
  args: [{ name: 'noSanitize' }]
647
615
  }], ctorParameters: () => [{ type: i1$1.DomSanitizer }] });
@@ -654,10 +622,10 @@ class ZeroFillPipe {
654
622
  }
655
623
  return s;
656
624
  }
657
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ZeroFillPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
658
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.16", ngImport: i0, type: ZeroFillPipe, isStandalone: true, name: "zeroFill" });
625
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ZeroFillPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
626
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: ZeroFillPipe, isStandalone: true, name: "zeroFill" });
659
627
  }
660
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ZeroFillPipe, decorators: [{
628
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ZeroFillPipe, decorators: [{
661
629
  type: Pipe,
662
630
  args: [{
663
631
  name: 'zeroFill',
@@ -671,10 +639,10 @@ function zeroFill(value, digitos, ...args) {
671
639
 
672
640
  class ColumnTypeTextComponent extends ColumnTypeComponent {
673
641
  column = {}; // 🟢 Solución
674
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeTextComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
675
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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$1.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" }] });
642
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeTextComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
643
+ 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$1.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" }] });
676
644
  }
677
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeTextComponent, decorators: [{
645
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeTextComponent, decorators: [{
678
646
  type: Component,
679
647
  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" }]
680
648
  }], propDecorators: { column: [{
@@ -687,10 +655,10 @@ class ColumnTypeMoneyComponent extends ColumnTypeComponent {
687
655
  value(row) {
688
656
  return (this.column.transformar ? this.column.transformar(row) : row[this.column.property]);
689
657
  }
690
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeMoneyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
691
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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$1.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" }] });
658
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeMoneyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
659
+ 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$1.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" }] });
692
660
  }
693
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeMoneyComponent, decorators: [{
661
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeMoneyComponent, decorators: [{
694
662
  type: Component,
695
663
  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" }]
696
664
  }], propDecorators: { column: [{
@@ -706,10 +674,10 @@ class ColumnTypeIconsComponent extends ColumnTypeComponent {
706
674
  }
707
675
  return columna.items;
708
676
  }
709
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeIconsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
710
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i5.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
677
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeIconsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
678
+ 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$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i5.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
711
679
  }
712
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeIconsComponent, decorators: [{
680
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeIconsComponent, decorators: [{
713
681
  type: Component,
714
682
  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" }]
715
683
  }], propDecorators: { column: [{
@@ -718,8 +686,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImpo
718
686
  }] } });
719
687
 
720
688
  class ColumnTypeModule {
721
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
722
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeModule, declarations: [ColumnTypeComponent,
689
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
690
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeModule, declarations: [ColumnTypeComponent,
723
691
  ColumnTypeTextComponent,
724
692
  ColumnTypeMoneyComponent,
725
693
  ColumnTypeNumberComponent,
@@ -741,14 +709,14 @@ class ColumnTypeModule {
741
709
  ColumnTypeIconsComponent,
742
710
  ColumnTypeSinoComponent,
743
711
  ColumnTypeProgressbarComponent] });
744
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeModule, imports: [CommonModule,
712
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeModule, imports: [CommonModule,
745
713
  MatTableModule,
746
714
  MatSortModule,
747
715
  MatTooltipModule,
748
716
  MatIcon,
749
717
  ProgressBarComponent] });
750
718
  }
751
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ColumnTypeModule, decorators: [{
719
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ColumnTypeModule, decorators: [{
752
720
  type: NgModule,
753
721
  args: [{
754
722
  declarations: [
@@ -812,10 +780,10 @@ class TablaMantenimientoColumnDefsComponent {
812
780
  trackByProperty(index, column) {
813
781
  return column.property;
814
782
  }
815
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TablaMantenimientoColumnDefsComponent, deps: [{ token: i2.MatTable, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
816
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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: i5$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: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i5.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "component", type: i3$1.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$1.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"] }] });
783
+ 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 });
784
+ 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: i5$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: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i5.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "component", type: i3$1.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$1.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"] }] });
817
785
  }
818
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TablaMantenimientoColumnDefsComponent, decorators: [{
786
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoColumnDefsComponent, decorators: [{
819
787
  type: Component,
820
788
  args: [{ selector: 'jvs-tabla-mantenimiento-column-defs', standalone: true, imports: [
821
789
  CommonModule,
@@ -864,10 +832,10 @@ class TablaMantenimientoMenuComponent {
864
832
  }
865
833
  ngOnInit() {
866
834
  }
867
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TablaMantenimientoMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
868
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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: i2$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }] });
835
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
836
+ 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: i2$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }] });
869
837
  }
870
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TablaMantenimientoMenuComponent, decorators: [{
838
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoMenuComponent, decorators: [{
871
839
  type: Component,
872
840
  args: [{ selector: 'jvs-tabla-mantenimiento-menu', standalone: true, imports: [
873
841
  CommonModule,
@@ -969,10 +937,10 @@ class TablaMantenimientoService {
969
937
  { label: '#', labelLista: 'Numeración', property: 'numeracion_automatica', type: 'numeracion_automatica' },
970
938
  ];
971
939
  }
972
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TablaMantenimientoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
973
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TablaMantenimientoService, providedIn: 'root' });
940
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
941
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoService, providedIn: 'root' });
974
942
  }
975
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TablaMantenimientoService, decorators: [{
943
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoService, decorators: [{
976
944
  type: Injectable,
977
945
  args: [{
978
946
  providedIn: 'root',
@@ -1750,10 +1718,10 @@ let TablaMantenimientoComponent = class TablaMantenimientoComponent {
1750
1718
  // this.accionRecargar.emit({ ...this.opcFiltroActual, ...{seleccionado: this.objSeleccionado}});
1751
1719
  }
1752
1720
  tipoValorFuncion = tipoValorFuncion;
1753
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TablaMantenimientoComponent, deps: [{ token: i1$2.FormBuilder }, { token: i2$2.Overlay }, { token: i0.ViewContainerRef }, { token: TablaMantenimientoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1754
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", 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: [
1721
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoComponent, deps: [{ token: i1$2.FormBuilder }, { token: i2$2.Overlay }, { token: i0.ViewContainerRef }, { token: TablaMantenimientoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1722
+ 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: [
1755
1723
  { provide: MAT_PAGINATOR_DEFAULT_OPTIONS, useValue: { formFieldAppearance: 'outline' } }
1756
- ], 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: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,.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: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: i5$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: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2$1.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: i2$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2$1.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.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i3$1.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$1.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: [
1724
+ ], 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: i5$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: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2$1.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: i2$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2$1.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.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i3$1.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$1.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: [
1757
1725
  trigger('detailExpand', [
1758
1726
  state('collapsed', style({ height: '0px', minHeight: '0' })),
1759
1727
  state('expanded', style({ height: '*' })),
@@ -1776,7 +1744,7 @@ let TablaMantenimientoComponent = class TablaMantenimientoComponent {
1776
1744
  TablaMantenimientoComponent = TablaMantenimientoComponent_1 = __decorate([
1777
1745
  UntilDestroy({ checkProperties: true })
1778
1746
  ], TablaMantenimientoComponent);
1779
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TablaMantenimientoComponent, decorators: [{
1747
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TablaMantenimientoComponent, decorators: [{
1780
1748
  type: Component,
1781
1749
  args: [{ selector: 'jvs-tabla-mantenimiento', standalone: true, imports: [
1782
1750
  CommonModule,
@@ -1817,7 +1785,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImpo
1817
1785
  ]),
1818
1786
  ], providers: [
1819
1787
  { provide: MAT_PAGINATOR_DEFAULT_OPTIONS, useValue: { formFieldAppearance: 'outline' } }
1820
- ], 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: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,.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: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"] }]
1788
+ ], 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"] }]
1821
1789
  }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: i2$2.Overlay }, { type: i0.ViewContainerRef }, { type: TablaMantenimientoService }, { type: i0.ChangeDetectorRef }], propDecorators: { id: [{
1822
1790
  type: HostBinding
1823
1791
  }], dataSuscription: [{
@@ -1930,10 +1898,10 @@ class LucesNavidadComponent {
1930
1898
  }
1931
1899
  ngOnInit() {
1932
1900
  }
1933
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: LucesNavidadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1934
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", type: LucesNavidadComponent, isStandalone: true, selector: "jvs-luces-navidad, [jvsLucesNavidad]", inputs: { enProduccion: "enProduccion", forzarMuestra: "forzarMuestra" }, ngImport: i0, template: "<ng-container *ngIf=\"forzarMuestra || (mesActual == 12 && enProduccion)\">\n <ul class=\"lightrope\">\n <li *ngFor=\"let e of [].constructor(100); let i = index\"></li>\n </ul>\n <div class=\"christmas-tree\"></div>\n</ng-container>\n", styles: [".lightrope{left:0;text-align:center;white-space:nowrap;overflow:hidden;position:absolute;z-index:1000;margin:-8px 0 0;padding:0;pointer-events:none;width:100%}.lightrope li{position:relative;animation-fill-mode:both;animation-iteration-count:infinite;list-style:none;padding:0;width:6px;height:14px;border-radius:50%;margin:10px;display:inline-block;background:#00f7a5;box-shadow:0 2.3333333333px 12px 1px #00f7a5;animation-name:flash-1;animation-duration:2s}.lightrope li:nth-child(odd){background:#0ff;box-shadow:0 2.3333333333px 12px 1px #00ffff80;animation-name:flash-2;animation-duration:.4s}.lightrope li:nth-child(4n+2){background:#f70094;box-shadow:0 2.3333333333px 12px 1px #f70094;animation-name:flash-3;animation-duration:1.1s}.lightrope li:nth-child(odd){animation-duration:1.8s}.lightrope li:nth-child(3n+1){animation-duration:1.4s}.lightrope li:before{content:\"\";position:absolute;background:#222;width:4px;height:4.6666666667px;border-radius:3px;top:-2.3333333333px;left:1px}.lightrope li:after{content:\"\";top:-7px;left:3px;position:absolute;width:32px;height:9.3333333333px;border-bottom:solid #222 2px;border-radius:50%}.lightrope li:last-child:after{content:none}.lightrope li:first-child{margin-left:-20px}@keyframes flash-1{0%,to{background:#00f7a5;box-shadow:0 2.3333333333px 12px 1px #00f7a5}50%{background:#00f7a566;box-shadow:0 2.3333333333px 12px 1px #00f7a533}}@keyframes flash-2{0%,to{background:#0ff;box-shadow:0 2.3333333333px 12px 1px #0ff}50%{background:#0ff6;box-shadow:0 2.3333333333px 12px 1px #0ff3}}@keyframes flash-3{0%,to{background:#f70094;box-shadow:0 2.3333333333px 12px 1px #f70094}50%{background:#f7009466;box-shadow:0 2.3333333333px 12px 1px #f7009433}}.christmas-tree{position:fixed;bottom:20px;left:20px;width:80px;height:120px;background:url(data:image/png;base64,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) no-repeat center center;background-size:contain;opacity:.8;z-index:1000;animation:glow 3s infinite ease-in-out}@keyframes glow{0%,to{opacity:.8}50%{opacity:1}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
1901
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: LucesNavidadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1902
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: LucesNavidadComponent, isStandalone: true, selector: "jvs-luces-navidad, [jvsLucesNavidad]", inputs: { enProduccion: "enProduccion", forzarMuestra: "forzarMuestra" }, ngImport: i0, template: "<ng-container *ngIf=\"forzarMuestra || (mesActual == 12 && enProduccion)\">\n <ul class=\"lightrope\">\n <li *ngFor=\"let e of [].constructor(100); let i = index\"></li>\n </ul>\n <div class=\"christmas-tree\"></div>\n</ng-container>\n", styles: [".lightrope{left:0;text-align:center;white-space:nowrap;overflow:hidden;position:absolute;z-index:1000;margin:-8px 0 0;padding:0;pointer-events:none;width:100%}.lightrope li{position:relative;animation-fill-mode:both;animation-iteration-count:infinite;list-style:none;padding:0;width:6px;height:14px;border-radius:50%;margin:10px;display:inline-block;background:#00f7a5;box-shadow:0 2.3333333333px 12px 1px #00f7a5;animation-name:flash-1;animation-duration:2s}.lightrope li:nth-child(odd){background:#0ff;box-shadow:0 2.3333333333px 12px 1px #00ffff80;animation-name:flash-2;animation-duration:.4s}.lightrope li:nth-child(4n+2){background:#f70094;box-shadow:0 2.3333333333px 12px 1px #f70094;animation-name:flash-3;animation-duration:1.1s}.lightrope li:nth-child(odd){animation-duration:1.8s}.lightrope li:nth-child(3n+1){animation-duration:1.4s}.lightrope li:before{content:\"\";position:absolute;background:#222;width:4px;height:4.6666666667px;border-radius:3px;top:-2.3333333333px;left:1px}.lightrope li:after{content:\"\";top:-7px;left:3px;position:absolute;width:32px;height:9.3333333333px;border-bottom:solid #222 2px;border-radius:50%}.lightrope li:last-child:after{content:none}.lightrope li:first-child{margin-left:-20px}@keyframes flash-1{0%,to{background:#00f7a5;box-shadow:0 2.3333333333px 12px 1px #00f7a5}50%{background:#00f7a566;box-shadow:0 2.3333333333px 12px 1px #00f7a533}}@keyframes flash-2{0%,to{background:#0ff;box-shadow:0 2.3333333333px 12px 1px #0ff}50%{background:#0ff6;box-shadow:0 2.3333333333px 12px 1px #0ff3}}@keyframes flash-3{0%,to{background:#f70094;box-shadow:0 2.3333333333px 12px 1px #f70094}50%{background:#f7009466;box-shadow:0 2.3333333333px 12px 1px #f7009433}}.christmas-tree{position:fixed;bottom:20px;left:20px;width:80px;height:120px;background:url(data:image/png;base64,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) no-repeat center center;background-size:contain;opacity:.8;z-index:1000;animation:glow 3s infinite ease-in-out}@keyframes glow{0%,to{opacity:.8}50%{opacity:1}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
1935
1903
  }
1936
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: LucesNavidadComponent, decorators: [{
1904
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: LucesNavidadComponent, decorators: [{
1937
1905
  type: Component,
1938
1906
  args: [{ selector: 'jvs-luces-navidad, [jvsLucesNavidad]', imports: [
1939
1907
  NgIf,
@@ -1961,10 +1929,10 @@ class MatSuffixSearchButtonComponent {
1961
1929
  this.eventBuscar.emit(true);
1962
1930
  }
1963
1931
  }
1964
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: MatSuffixSearchButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1965
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", type: MatSuffixSearchButtonComponent, isStandalone: true, selector: "div[matSuffix][matSuffixSearchButton]", inputs: { fControl: "fControl" }, outputs: { eventLimpiar: "eventLimpiar", eventBuscar: "eventBuscar" }, host: { classAttribute: "flex items-center justify-start" }, ngImport: i0, template: "<button matRipple type=\"button\" class=\"boton-circular-gris\"\n (click)=\"emitirClick(); $event.preventDefault();\"\n>\n <mat-icon [svgIcon]=\"(control.value ? 'roundCancel' : 'roundSearch')\" class=\"icon-xs\"></mat-icon>\n</button>\n", dependencies: [{ kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
1932
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MatSuffixSearchButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1933
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: MatSuffixSearchButtonComponent, isStandalone: true, selector: "div[matSuffix][matSuffixSearchButton]", inputs: { fControl: "fControl" }, outputs: { eventLimpiar: "eventLimpiar", eventBuscar: "eventBuscar" }, host: { classAttribute: "flex items-center justify-start" }, ngImport: i0, template: "<button matRipple type=\"button\" class=\"boton-circular-gris\"\n (click)=\"emitirClick(); $event.preventDefault();\"\n>\n <mat-icon [svgIcon]=\"(control.value ? 'roundCancel' : 'roundSearch')\" class=\"icon-xs\"></mat-icon>\n</button>\n", dependencies: [{ kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
1966
1934
  }
1967
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: MatSuffixSearchButtonComponent, decorators: [{
1935
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MatSuffixSearchButtonComponent, decorators: [{
1968
1936
  type: Component,
1969
1937
  args: [{ selector: 'div[matSuffix][matSuffixSearchButton]', imports: [
1970
1938
  MatRipple,
@@ -2035,10 +2003,10 @@ class MenuComponent {
2035
2003
  }
2036
2004
  });
2037
2005
  }
2038
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2039
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", type: MenuComponent, isStandalone: true, selector: "jvs-menu", inputs: { cssBoton: "cssBoton", title: "title", disabled: "disabled", itemSeleccion: "itemSeleccion", menu: "menu" }, outputs: { action: "action" }, viewQueries: [{ propertyName: "matmenus", predicate: MatMenu, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"yet\">\n <button matRipple [matMenuTriggerFor]=\"matmenus.first\"\n [disabled]=\"disabled\"\n type=\"button\" [class]=\"cssBoton ?? 'boton-circular boton-circular-red border-0'\"\n (click)=\"$event.preventDefault(); $event.stopImmediatePropagation()\"\n [matTooltip]=\"title\"\n >\n <ng-content></ng-content>\n </button>\n</ng-container>\n\n<!--<pre class=\"text-indigo-900\">{{_submenus | json}}</pre>-->\n<ng-container *ngFor=\"let menu of _submenus\">\n <!--<pre class=\"text-red-700\">{{menu | json}}</pre>-->\n <mat-menu xPosition=\"before\" yPosition=\"below\" class=\"max-w-none\">\n <ng-container *ngFor=\"let item of menu\">\n <!--<pre *ngIf=\"menu$\" class=\"text-orange-700\">{{item | json}}</pre>-->\n <!--<span>{{ [item.label, item.idxOpcionCalc!=-1 , yet , (!item.esVisible || item.esVisible({itemMenu: item, archivo: itemSeleccion})), [!item.esVisible , (item.esVisible ? item.esVisible({itemMenu: item, archivo: itemSeleccion}) : 'NO HAY')]] | json }}</span>-->\n <button mat-menu-item *ngIf=\"item.idxOpcionCalc!=-1 && yet && (!item.esVisible || item.esVisible({itemMenu: item, archivo: itemSeleccion}))\"\n class=\"flex items-center justify-items-center uppercase w-full rounded-none px-2 \"\n [matMenuTriggerFor]=\"getMenu(item.idxOpcionCalc)\">\n <mat-icon *ngIf=\"item.icono\"\n class=\"flex-none flex items-center justify-center !text-red-700 !mr-1 icon-2xs\"\n [svgIcon]=\"item.icono ?? 'fa5sFileSignature'\"\n ></mat-icon>\n <span class=\"grow text-2xs\" [innerHTML]=\"item.label\">{{item.label}}</span>\n </button>\n <button mat-menu-item *ngIf=\"item.idxOpcionCalc==-1 && (!item.esVisible || item.esVisible(item))\" (click)=\"onClick(item.valorSeleccion)\"\n class=\"flex items-center justify-items-center uppercase w-full rounded-none px-2 \"\n >\n <mat-icon *ngIf=\"item.icono\"\n class=\"flex-none flex items-center justify-center !text-red-700 !mr-1 icon-2xs\"\n [svgIcon]=\"item.icono ?? 'fa5sFileSignature'\"\n ></mat-icon>\n <span class=\"grow text-2xs\" [innerHTML]=\"item.label\">{{item.label}} </span>\n </button>\n\n </ng-container>\n </mat-menu>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: MatMenuModule }, { kind: "component", type: i2$1.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: i2$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2$1.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: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i5.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
2006
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2007
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: MenuComponent, isStandalone: true, selector: "jvs-menu", inputs: { cssBoton: "cssBoton", title: "title", disabled: "disabled", itemSeleccion: "itemSeleccion", menu: "menu" }, outputs: { action: "action" }, viewQueries: [{ propertyName: "matmenus", predicate: MatMenu, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"yet\">\n <button matRipple [matMenuTriggerFor]=\"matmenus.first\"\n [disabled]=\"disabled\"\n type=\"button\" [class]=\"cssBoton ?? 'boton-circular boton-circular-red border-0'\"\n (click)=\"$event.preventDefault(); $event.stopImmediatePropagation()\"\n [matTooltip]=\"title\"\n >\n <ng-content></ng-content>\n </button>\n</ng-container>\n\n<!--<pre class=\"text-indigo-900\">{{_submenus | json}}</pre>-->\n<ng-container *ngFor=\"let menu of _submenus\">\n <!--<pre class=\"text-red-700\">{{menu | json}}</pre>-->\n <mat-menu xPosition=\"before\" yPosition=\"below\" class=\"max-w-none\">\n <ng-container *ngFor=\"let item of menu\">\n <!--<pre *ngIf=\"menu$\" class=\"text-orange-700\">{{item | json}}</pre>-->\n <!--<span>{{ [item.label, item.idxOpcionCalc!=-1 , yet , (!item.esVisible || item.esVisible({itemMenu: item, archivo: itemSeleccion})), [!item.esVisible , (item.esVisible ? item.esVisible({itemMenu: item, archivo: itemSeleccion}) : 'NO HAY')]] | json }}</span>-->\n <button mat-menu-item *ngIf=\"item.idxOpcionCalc!=-1 && yet && (!item.esVisible || item.esVisible({itemMenu: item, archivo: itemSeleccion}))\"\n class=\"flex items-center justify-items-center uppercase w-full rounded-none px-2 \"\n [matMenuTriggerFor]=\"getMenu(item.idxOpcionCalc)\">\n <mat-icon *ngIf=\"item.icono\"\n class=\"flex-none flex items-center justify-center !text-red-700 !mr-1 icon-2xs\"\n [svgIcon]=\"item.icono ?? 'fa5sFileSignature'\"\n ></mat-icon>\n <span class=\"grow text-2xs\" [innerHTML]=\"item.label\">{{item.label}}</span>\n </button>\n <button mat-menu-item *ngIf=\"item.idxOpcionCalc==-1 && (!item.esVisible || item.esVisible(item))\" (click)=\"onClick(item.valorSeleccion)\"\n class=\"flex items-center justify-items-center uppercase w-full rounded-none px-2 \"\n >\n <mat-icon *ngIf=\"item.icono\"\n class=\"flex-none flex items-center justify-center !text-red-700 !mr-1 icon-2xs\"\n [svgIcon]=\"item.icono ?? 'fa5sFileSignature'\"\n ></mat-icon>\n <span class=\"grow text-2xs\" [innerHTML]=\"item.label\">{{item.label}} </span>\n </button>\n\n </ng-container>\n </mat-menu>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: MatMenuModule }, { kind: "component", type: i2$1.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: i2$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2$1.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: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i5.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
2040
2008
  }
2041
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: MenuComponent, decorators: [{
2009
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MenuComponent, decorators: [{
2042
2010
  type: Component,
2043
2011
  args: [{ selector: 'jvs-menu', standalone: true, imports: [
2044
2012
  CommonModule,
@@ -2094,77 +2062,94 @@ function generarArbol(params) {
2094
2062
  }
2095
2063
 
2096
2064
  class ListaArbolComponent {
2097
- listaSuscription;
2098
- nombreColeccion;
2099
- checkbox = false;
2100
- expandirRecursivo = false;
2101
- checkboxSeleccionados = [];
2102
- campoId;
2103
- campoIdPadre;
2104
- campoStr;
2105
- campoOrden;
2106
- strHijoContainer = 'hijos';
2107
- menuContextual;
2108
- classSeleccionado = ['bg-primary-activo', 'text-primary', 'dark:!bg-primary-dark-activo'];
2109
- classAnulado = ['line-through', 'text-red', 'italic'];
2110
- campoAnulado;
2111
- templateTxtData;
2112
- condicionMostrar;
2113
- condicionesClaseFila = () => [];
2114
- set selectionModel(val) {
2115
- this.objSeleccionado = val;
2116
- }
2117
- selectionModelChange = new EventEmitter();
2118
- seleccionado = new EventEmitter();
2119
- listaCheck = new EventEmitter();
2120
- listaCheckObj = new EventEmitter();
2121
- _idTabla = [];
2122
- get idTabla() {
2123
- return this._idTabla;
2124
- }
2125
- set idTabla(val) {
2126
- if (Array.isArray(val)) {
2127
- this._idTabla = val;
2128
- }
2129
- else {
2130
- this._idTabla.push(val);
2065
+ // Inputs
2066
+ listaSuscription = input.required();
2067
+ nombreColeccion = input.required();
2068
+ checkbox = input(false);
2069
+ expandirRecursivo = input(false);
2070
+ checkboxSeleccionados = input([]);
2071
+ campoId = input.required();
2072
+ campoIdPadre = input.required();
2073
+ campoStr = input(''); // Optional - can use templateTxtData instead
2074
+ campoOrden = input();
2075
+ strHijoContainer = input('hijos');
2076
+ menuContextual = input();
2077
+ classSeleccionado = input(['bg-primary-activo', 'text-primary', 'dark:!bg-primary-dark-activo']);
2078
+ classAnulado = input(['line-through', 'text-red', 'italic']);
2079
+ campoAnulado = input();
2080
+ templateTxtData = input();
2081
+ condicionMostrar = input();
2082
+ condicionesClaseFila = input(() => []);
2083
+ // idTabla input with transform to support both string and string[]
2084
+ idTabla = input.required({
2085
+ transform: (val) => {
2086
+ if (Array.isArray(val)) {
2087
+ this._idTabla.set(val);
2088
+ return val;
2089
+ }
2090
+ else {
2091
+ this._idTabla.update(current => [...current, val]);
2092
+ return [val];
2093
+ }
2131
2094
  }
2132
- }
2133
- get buscarItemSeleccionado() {
2134
- const dRet = this.listaOriginal.find(itm => this._seleccionado === this.propiedadSeleccion(itm));
2135
- return dRet ?? null;
2136
- }
2137
- get objSeleccionado() {
2138
- return this.buscarItemSeleccionado; // ?? this.objThis?.['seleccionados']?.[this.nombreColeccion];
2139
- }
2140
- set objSeleccionado(val) {
2141
- this.seleccionarItem(val, true);
2142
- }
2095
+ });
2096
+ // selectionModel input for backward compatibility
2097
+ selectionModel = input();
2098
+ // Outputs
2099
+ selectionModelChange = output();
2100
+ seleccionado = output();
2101
+ listaCheck = output();
2102
+ listaCheckObj = output();
2103
+ // Internal state as signals
2104
+ _idTabla = signal([]);
2105
+ _seleccionado = signal(null);
2106
+ listaMuestraArbol = signal([]);
2107
+ listaOriginal = signal([]);
2143
2108
  chkLista = new DataModel$1();
2144
- listaMuestraArbol = [];
2145
- listaOriginal = [];
2146
- treeControl = new NestedTreeControl((node) => node[this.strHijoContainer]);
2147
- _seleccionado = {};
2148
- ngOnInit() {
2149
- this.listaSuscription.subscribe(res => {
2109
+ // Computed values
2110
+ idTablaValue = computed(() => this._idTabla());
2111
+ buscarItemSeleccionado = computed(() => {
2112
+ const selId = this._seleccionado();
2113
+ const lista = this.listaOriginal();
2114
+ if (!selId)
2115
+ return null;
2116
+ return lista.find(itm => selId === this.propiedadSeleccion(itm)) ?? null;
2117
+ });
2118
+ objSeleccionado = computed(() => this.buscarItemSeleccionado());
2119
+ treeControl = new NestedTreeControl((node) => node[this.strHijoContainer()]);
2120
+ // Convert signal to observable for proper subscription management
2121
+ listaSuscription$ = toObservable(this.listaSuscription);
2122
+ constructor() {
2123
+ // Watch selectionModel input for backward compatibility
2124
+ effect(() => {
2125
+ const selModel = this.selectionModel();
2126
+ if (selModel) {
2127
+ untracked(() => this.seleccionarItem(selModel, true));
2128
+ }
2129
+ });
2130
+ // Setup subscription with automatic cleanup using switchMap
2131
+ // switchMap automatically unsubscribes from previous observable when a new one arrives
2132
+ this.listaSuscription$
2133
+ .pipe(switchMap(obs => obs), takeUntilDestroyed())
2134
+ .subscribe(res => {
2150
2135
  if (res) {
2151
- this.listaOriginal = res;
2136
+ this.listaOriginal.set(res);
2152
2137
  const listaAs = generarArbol({
2153
2138
  lista: res,
2154
- campoId: this.campoId,
2155
- campoIdPadre: this.campoIdPadre,
2139
+ campoId: this.campoId(),
2140
+ campoIdPadre: this.campoIdPadre(),
2156
2141
  idPadre: null,
2157
- strChildren: this.strHijoContainer,
2158
- campoOrden: this.campoOrden
2142
+ strChildren: this.strHijoContainer(),
2143
+ campoOrden: this.campoOrden(),
2144
+ });
2145
+ // Use untracked to avoid unnecessary re-renders
2146
+ untracked(() => {
2147
+ this.listaMuestraArbol.set(listaAs);
2159
2148
  });
2160
- this.listaMuestraArbol = [];
2161
- setTimeout(() => {
2162
- this.listaMuestraArbol = listaAs;
2163
- }, 1);
2164
- if (this.checkbox) {
2165
- this.chkLista.agregarControles(res, this.campoId);
2166
- this.checkboxSeleccionados.forEach((chkSel) => {
2167
- this.chkLista.setState(chkSel[this.campoId], true);
2149
+ if (this.checkbox()) {
2150
+ this.chkLista.agregarControles(res, this.campoId());
2151
+ this.checkboxSeleccionados().forEach((chkSel) => {
2152
+ this.chkLista.setState(chkSel[this.campoId()], true);
2168
2153
  });
2169
2154
  this.emitirModeloCheck();
2170
2155
  }
@@ -2173,47 +2158,50 @@ class ListaArbolComponent {
2173
2158
  }
2174
2159
  idTablaValor(data) {
2175
2160
  if (data) {
2176
- if (this.idTabla.length < 1) {
2161
+ const idTablaVal = this._idTabla();
2162
+ if (idTablaVal.length < 1) {
2177
2163
  return shortHash(JSON.stringify({ data, claseFinal: undefined }));
2178
2164
  }
2179
- return this.idTabla.map(d => data[d]).join('-');
2165
+ return idTablaVal.map(d => data[d]).join('-');
2180
2166
  }
2181
2167
  return '';
2182
2168
  }
2183
2169
  propiedadSeleccion(item) {
2184
- return `${this.nombreColeccion}_${this.idTablaValor(item)}`;
2170
+ return `${this.nombreColeccion()}_${this.idTablaValor(item)}`;
2185
2171
  }
2186
2172
  esSeleccionActual(item) {
2187
- return this._seleccionado === this.propiedadSeleccion(item);
2173
+ return this._seleccionado() === this.propiedadSeleccion(item);
2188
2174
  }
2189
2175
  seleccionarItem(item, forzado = false) {
2190
2176
  const idItem = this.propiedadSeleccion(item);
2191
2177
  if (forzado) {
2192
- this._seleccionado = idItem;
2178
+ this._seleccionado.set(idItem);
2193
2179
  }
2194
2180
  else {
2195
- this._seleccionado = this._seleccionado === idItem ? null : idItem;
2181
+ this._seleccionado.update(current => current === idItem ? null : idItem);
2196
2182
  }
2197
- this.selectionModelChange.emit(this.objSeleccionado);
2198
- this.seleccionado.emit(this.objSeleccionado);
2183
+ const objSel = this.objSeleccionado();
2184
+ this.selectionModelChange.emit(objSel);
2185
+ this.seleccionado.emit(objSel);
2199
2186
  }
2200
- hasChild = (_, node) => !!node[this.strHijoContainer] && node[this.strHijoContainer].length > 0;
2187
+ hasChild = (_, node) => {
2188
+ const strHijo = this.strHijoContainer();
2189
+ return !!node[strHijo] && node[strHijo].length > 0;
2190
+ };
2201
2191
  opcMenu(v) {
2202
- // console.warn(v);
2203
- // console.warn(this.objSeleccionado);
2204
- const opAdic = { seccion: this.nombreColeccion };
2205
- opAdic['itemSeleccionado'] = this.objSeleccionado;
2206
- // v = {...v, ...opAdic};
2207
- // this.seleccionado.emit(v);
2192
+ const opAdic = { seccion: this.nombreColeccion() };
2193
+ opAdic['itemSeleccionado'] = this.objSeleccionado();
2208
2194
  }
2209
2195
  emitirModeloCheck() {
2210
2196
  this.listaCheck.emit(this.chkLista.generarLista());
2211
2197
  this.listaCheckObj.emit(this.chkLista.generarLista('object'));
2212
2198
  }
2213
2199
  cambiarPadre(checkActual, estado) {
2214
- const parentId = checkActual[this.campoIdPadre];
2200
+ const parentId = checkActual[this.campoIdPadre()];
2215
2201
  if (parentId) {
2216
- const padreAct = this.listaMuestraArbol.find((itm) => itm[this.campoId] == parentId);
2202
+ // Fix: buscar en listaOriginal en lugar de listaMuestraArbol
2203
+ const listaOrig = this.listaOriginal();
2204
+ const padreAct = listaOrig.find((itm) => itm[this.campoId()] === parentId);
2217
2205
  if (padreAct) {
2218
2206
  this.chkLista.setState(parentId, this.hijosActivos('checked', padreAct) || this.hijosActivos('indeterminate', padreAct));
2219
2207
  this.cambiarPadre(padreAct, estado);
@@ -2227,14 +2215,14 @@ class ListaArbolComponent {
2227
2215
  });
2228
2216
  }
2229
2217
  this.cambiarPadre(checkActual, estado);
2230
- this.chkLista.setState(checkActual[this.campoId], estado);
2218
+ this.chkLista.setState(checkActual[this.campoId()], estado);
2231
2219
  }
2232
2220
  hijosActivos(tipo, checkActual) {
2233
2221
  let totalHijos = 0;
2234
2222
  let cantActivo = 0;
2235
2223
  if (this.hasChild(0, checkActual)) {
2236
2224
  (this.treeControl.getChildren(checkActual) ?? []).forEach((vas) => {
2237
- if (this.chkLista.getState(vas[this.campoId] + '')) {
2225
+ if (this.chkLista.getState(vas[this.campoId()] + '')) {
2238
2226
  cantActivo++;
2239
2227
  }
2240
2228
  totalHijos++;
@@ -2242,31 +2230,32 @@ class ListaArbolComponent {
2242
2230
  }
2243
2231
  switch (tipo) {
2244
2232
  case 'checked':
2245
- return (cantActivo == totalHijos);
2233
+ return (cantActivo === totalHijos);
2246
2234
  case 'indeterminate':
2247
- if (cantActivo == totalHijos) {
2248
- this.chkLista.setState(checkActual[this.campoId], true);
2249
- }
2250
- return ((cantActivo > 0) && (cantActivo != totalHijos));
2235
+ // Fix: remover efecto secundario
2236
+ return ((cantActivo > 0) && (cantActivo !== totalHijos));
2251
2237
  }
2252
2238
  return false;
2253
2239
  }
2254
2240
  classFila(item) {
2255
2241
  let claseFinal = [];
2256
- if (this.campoAnulado && (item[this.campoAnulado] == 1)) {
2257
- claseFinal = claseFinal.concat(this.classAnulado);
2242
+ const campoAnul = this.campoAnulado();
2243
+ if (campoAnul && (item[campoAnul] === 1)) {
2244
+ claseFinal = claseFinal.concat(this.classAnulado());
2258
2245
  }
2259
- if (this.objSeleccionado == item || this.esSeleccionActual(item)) {
2260
- claseFinal = claseFinal.concat(this.classSeleccionado);
2246
+ const objSel = this.objSeleccionado();
2247
+ if (objSel === item || this.esSeleccionActual(item)) {
2248
+ claseFinal = claseFinal.concat(this.classSeleccionado());
2261
2249
  }
2262
- claseFinal = claseFinal.concat(this.condicionesClaseFila(item));
2263
- item.claseFinal = claseFinal;
2250
+ const condClases = this.condicionesClaseFila();
2251
+ claseFinal = claseFinal.concat(condClases(item));
2252
+ // Fix: no mutar el objeto original
2264
2253
  return claseFinal;
2265
2254
  }
2266
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ListaArbolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2267
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", type: ListaArbolComponent, isStandalone: true, selector: "jvs-lista-arbol", inputs: { listaSuscription: "listaSuscription", nombreColeccion: "nombreColeccion", checkbox: "checkbox", expandirRecursivo: "expandirRecursivo", checkboxSeleccionados: "checkboxSeleccionados", campoId: "campoId", campoIdPadre: "campoIdPadre", campoStr: "campoStr", campoOrden: "campoOrden", strHijoContainer: "strHijoContainer", menuContextual: "menuContextual", classSeleccionado: "classSeleccionado", classAnulado: "classAnulado", campoAnulado: "campoAnulado", templateTxtData: "templateTxtData", condicionMostrar: "condicionMostrar", condicionesClaseFila: "condicionesClaseFila", selectionModel: "selectionModel", idTabla: "idTabla" }, outputs: { selectionModelChange: "selectionModelChange", seleccionado: "seleccionado", listaCheck: "listaCheck", listaCheckObj: "listaCheckObj" }, ngImport: i0, template: "<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n\n <!-- Cambiar mat-tree-node plano por mat-nested-tree-node sin hijos -->\n <mat-nested-tree-node *matTreeNodeDef=\"let node\">\n <div class=\"flex flex-col trans-ease-out\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n\n<ng-template #liDat let-node=\"node\" let-nested=\"nested\">\n <div class=\"flex items-center gap-0 text-sm trans-ease-out cursor-pointer p-0 w-full\"\n (contextmenu)=\"menuContextual?.abrirMenuContextual($event, node); $event.preventDefault();\"\n (click)=\"seleccionarItem(node); opcMenu({ seccion: nombreColeccion, tipo: 'ver', item: node }); menuContextual?.cerrarMenuContextual(); (nested === false) && $event.stopPropagation();\"\n [ngClass]=\"classFila(node)\">\n <mat-icon *ngIf=\"!nested\"></mat-icon>\n <mat-icon *ngIf=\"nested\"\n [svgIcon]=\"treeControl.isExpanded(node) ? 'roundExpandMore' : 'roundChevronRight'\"></mat-icon>\n\n <mat-checkbox *ngIf=\"checkbox\"\n [(ngModel)]=\"chkLista.modelosChk[node[campoId]]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"cambiarCheck(node, $event.checked); emitirModeloCheck()\"\n [checked]=\"nested ? hijosActivos('checked', node) : false\"\n [indeterminate]=\"nested ? hijosActivos('indeterminate', node) : false\">\n </mat-checkbox>\n\n <span *ngIf=\"!templateTxtData\" class=\"w-full\">{{ node[campoStr] }}</span>\n <ng-container *ngIf=\"templateTxtData\" [ngTemplateOutlet]=\"templateTxtData\"\n [ngTemplateOutletContext]=\"{ data: node, treeControl }\"></ng-container>\n </div>\n</ng-template>\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: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { 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: MatTreeModule }, { kind: "directive", type: i3$2.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], outputs: ["activation", "expandedChange"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i3$2.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i3$2.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i3$2.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i3$2.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5$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"] }] });
2255
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ListaArbolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2256
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.14", type: ListaArbolComponent, isStandalone: true, selector: "jvs-lista-arbol", inputs: { listaSuscription: { classPropertyName: "listaSuscription", publicName: "listaSuscription", isSignal: true, isRequired: true, transformFunction: null }, nombreColeccion: { classPropertyName: "nombreColeccion", publicName: "nombreColeccion", isSignal: true, isRequired: true, transformFunction: null }, checkbox: { classPropertyName: "checkbox", publicName: "checkbox", isSignal: true, isRequired: false, transformFunction: null }, expandirRecursivo: { classPropertyName: "expandirRecursivo", publicName: "expandirRecursivo", isSignal: true, isRequired: false, transformFunction: null }, checkboxSeleccionados: { classPropertyName: "checkboxSeleccionados", publicName: "checkboxSeleccionados", isSignal: true, isRequired: false, transformFunction: null }, campoId: { classPropertyName: "campoId", publicName: "campoId", isSignal: true, isRequired: true, transformFunction: null }, campoIdPadre: { classPropertyName: "campoIdPadre", publicName: "campoIdPadre", isSignal: true, isRequired: true, transformFunction: null }, campoStr: { classPropertyName: "campoStr", publicName: "campoStr", isSignal: true, isRequired: false, transformFunction: null }, campoOrden: { classPropertyName: "campoOrden", publicName: "campoOrden", isSignal: true, isRequired: false, transformFunction: null }, strHijoContainer: { classPropertyName: "strHijoContainer", publicName: "strHijoContainer", isSignal: true, isRequired: false, transformFunction: null }, menuContextual: { classPropertyName: "menuContextual", publicName: "menuContextual", isSignal: true, isRequired: false, transformFunction: null }, classSeleccionado: { classPropertyName: "classSeleccionado", publicName: "classSeleccionado", isSignal: true, isRequired: false, transformFunction: null }, classAnulado: { classPropertyName: "classAnulado", publicName: "classAnulado", isSignal: true, isRequired: false, transformFunction: null }, campoAnulado: { classPropertyName: "campoAnulado", publicName: "campoAnulado", isSignal: true, isRequired: false, transformFunction: null }, templateTxtData: { classPropertyName: "templateTxtData", publicName: "templateTxtData", isSignal: true, isRequired: false, transformFunction: null }, condicionMostrar: { classPropertyName: "condicionMostrar", publicName: "condicionMostrar", isSignal: true, isRequired: false, transformFunction: null }, condicionesClaseFila: { classPropertyName: "condicionesClaseFila", publicName: "condicionesClaseFila", isSignal: true, isRequired: false, transformFunction: null }, idTabla: { classPropertyName: "idTabla", publicName: "idTabla", isSignal: true, isRequired: true, transformFunction: null }, selectionModel: { classPropertyName: "selectionModel", publicName: "selectionModel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionModelChange: "selectionModelChange", seleccionado: "seleccionado", listaCheck: "listaCheck", listaCheckObj: "listaCheckObj" }, ngImport: i0, template: "<mat-tree [dataSource]=\"listaMuestraArbol()\" [treeControl]=\"treeControl\">\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle\n [matTreeNodeToggleRecursive]=\"expandirRecursivo()\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.hidden]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n\n <!-- Cambiar mat-tree-node plano por mat-nested-tree-node sin hijos -->\n <mat-nested-tree-node *matTreeNodeDef=\"let node\">\n <div class=\"flex flex-col trans-ease-out\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n\n<ng-template #liDat let-node=\"node\" let-nested=\"nested\">\n <div class=\"flex items-center gap-0 text-sm trans-ease-out cursor-pointer p-0 w-full\"\n (contextmenu)=\"menuContextual()?.abrirMenuContextual($event, node); $event.preventDefault();\"\n (click)=\"seleccionarItem(node); opcMenu({ seccion: nombreColeccion(), tipo: 'ver', item: node }); menuContextual()?.cerrarMenuContextual(); (nested === false) && $event.stopPropagation();\"\n [ngClass]=\"classFila(node)\">\n <mat-icon *ngIf=\"!nested\"></mat-icon>\n <mat-icon *ngIf=\"nested\"\n [svgIcon]=\"treeControl.isExpanded(node) ? 'roundExpandMore' : 'roundChevronRight'\"></mat-icon>\n\n <mat-checkbox *ngIf=\"checkbox()\"\n [(ngModel)]=\"chkLista.modelosChk[node[campoId()]]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"cambiarCheck(node, $event.checked); emitirModeloCheck()\"\n [indeterminate]=\"hasChild(0, node) && hijosActivos('indeterminate', node)\"\n [checked]=\"hasChild(0, node) ? hijosActivos('checked', node) : chkLista.modelosChk[node[campoId()]]\">\n </mat-checkbox>\n\n <span *ngIf=\"!templateTxtData()\" class=\"w-full\">{{ node[campoStr()] }}</span>\n <ng-container *ngIf=\"templateTxtData()\" [ngTemplateOutlet]=\"templateTxtData()!\"\n [ngTemplateOutletContext]=\"{ data: node, treeControl }\"></ng-container>\n </div>\n</ng-template>\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: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { 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: MatTreeModule }, { kind: "directive", type: i3$2.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], outputs: ["activation", "expandedChange"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i3$2.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i3$2.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i3$2.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i3$2.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5$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"] }] });
2268
2257
  }
2269
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: ListaArbolComponent, decorators: [{
2258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ListaArbolComponent, decorators: [{
2270
2259
  type: Component,
2271
2260
  args: [{ selector: 'jvs-lista-arbol', standalone: true, imports: [
2272
2261
  CommonModule,
@@ -2274,55 +2263,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImpo
2274
2263
  MatTreeModule,
2275
2264
  MatIconModule,
2276
2265
  MatCheckboxModule,
2277
- ], template: "<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n\n <!-- Cambiar mat-tree-node plano por mat-nested-tree-node sin hijos -->\n <mat-nested-tree-node *matTreeNodeDef=\"let node\">\n <div class=\"flex flex-col trans-ease-out\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n\n<ng-template #liDat let-node=\"node\" let-nested=\"nested\">\n <div class=\"flex items-center gap-0 text-sm trans-ease-out cursor-pointer p-0 w-full\"\n (contextmenu)=\"menuContextual?.abrirMenuContextual($event, node); $event.preventDefault();\"\n (click)=\"seleccionarItem(node); opcMenu({ seccion: nombreColeccion, tipo: 'ver', item: node }); menuContextual?.cerrarMenuContextual(); (nested === false) && $event.stopPropagation();\"\n [ngClass]=\"classFila(node)\">\n <mat-icon *ngIf=\"!nested\"></mat-icon>\n <mat-icon *ngIf=\"nested\"\n [svgIcon]=\"treeControl.isExpanded(node) ? 'roundExpandMore' : 'roundChevronRight'\"></mat-icon>\n\n <mat-checkbox *ngIf=\"checkbox\"\n [(ngModel)]=\"chkLista.modelosChk[node[campoId]]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"cambiarCheck(node, $event.checked); emitirModeloCheck()\"\n [checked]=\"nested ? hijosActivos('checked', node) : false\"\n [indeterminate]=\"nested ? hijosActivos('indeterminate', node) : false\">\n </mat-checkbox>\n\n <span *ngIf=\"!templateTxtData\" class=\"w-full\">{{ node[campoStr] }}</span>\n <ng-container *ngIf=\"templateTxtData\" [ngTemplateOutlet]=\"templateTxtData\"\n [ngTemplateOutletContext]=\"{ data: node, treeControl }\"></ng-container>\n </div>\n</ng-template>\n" }]
2278
- }], propDecorators: { listaSuscription: [{
2279
- type: Input
2280
- }], nombreColeccion: [{
2281
- type: Input
2282
- }], checkbox: [{
2283
- type: Input
2284
- }], expandirRecursivo: [{
2285
- type: Input
2286
- }], checkboxSeleccionados: [{
2287
- type: Input
2288
- }], campoId: [{
2289
- type: Input
2290
- }], campoIdPadre: [{
2291
- type: Input
2292
- }], campoStr: [{
2293
- type: Input
2294
- }], campoOrden: [{
2295
- type: Input
2296
- }], strHijoContainer: [{
2297
- type: Input
2298
- }], menuContextual: [{
2299
- type: Input
2300
- }], classSeleccionado: [{
2301
- type: Input
2302
- }], classAnulado: [{
2303
- type: Input
2304
- }], campoAnulado: [{
2305
- type: Input
2306
- }], templateTxtData: [{
2307
- type: Input
2308
- }], condicionMostrar: [{
2309
- type: Input
2310
- }], condicionesClaseFila: [{
2311
- type: Input
2312
- }], selectionModel: [{
2313
- type: Input
2314
- }], selectionModelChange: [{
2315
- type: Output
2316
- }], seleccionado: [{
2317
- type: Output
2318
- }], listaCheck: [{
2319
- type: Output
2320
- }], listaCheckObj: [{
2321
- type: Output
2322
- }], idTabla: [{
2323
- type: Input,
2324
- args: [{ required: true }]
2325
- }] } });
2266
+ ], template: "<mat-tree [dataSource]=\"listaMuestraArbol()\" [treeControl]=\"treeControl\">\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle\n [matTreeNodeToggleRecursive]=\"expandirRecursivo()\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.hidden]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n\n <!-- Cambiar mat-tree-node plano por mat-nested-tree-node sin hijos -->\n <mat-nested-tree-node *matTreeNodeDef=\"let node\">\n <div class=\"flex flex-col trans-ease-out\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n\n<ng-template #liDat let-node=\"node\" let-nested=\"nested\">\n <div class=\"flex items-center gap-0 text-sm trans-ease-out cursor-pointer p-0 w-full\"\n (contextmenu)=\"menuContextual()?.abrirMenuContextual($event, node); $event.preventDefault();\"\n (click)=\"seleccionarItem(node); opcMenu({ seccion: nombreColeccion(), tipo: 'ver', item: node }); menuContextual()?.cerrarMenuContextual(); (nested === false) && $event.stopPropagation();\"\n [ngClass]=\"classFila(node)\">\n <mat-icon *ngIf=\"!nested\"></mat-icon>\n <mat-icon *ngIf=\"nested\"\n [svgIcon]=\"treeControl.isExpanded(node) ? 'roundExpandMore' : 'roundChevronRight'\"></mat-icon>\n\n <mat-checkbox *ngIf=\"checkbox()\"\n [(ngModel)]=\"chkLista.modelosChk[node[campoId()]]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"cambiarCheck(node, $event.checked); emitirModeloCheck()\"\n [indeterminate]=\"hasChild(0, node) && hijosActivos('indeterminate', node)\"\n [checked]=\"hasChild(0, node) ? hijosActivos('checked', node) : chkLista.modelosChk[node[campoId()]]\">\n </mat-checkbox>\n\n <span *ngIf=\"!templateTxtData()\" class=\"w-full\">{{ node[campoStr()] }}</span>\n <ng-container *ngIf=\"templateTxtData()\" [ngTemplateOutlet]=\"templateTxtData()!\"\n [ngTemplateOutletContext]=\"{ data: node, treeControl }\"></ng-container>\n </div>\n</ng-template>\n" }]
2267
+ }], ctorParameters: () => [] });
2326
2268
 
2327
2269
  // export {};
2328
2270
  // import './src/styles.scss';