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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dialog-flotante/dialog-flotante.component.d.ts +32 -0
  2. package/dialog-flotante/dialog-flotante.interface.d.ts +11 -0
  3. package/dialog-flotante/index.d.ts +5 -0
  4. package/fesm2022/jvsoft-components-dialog-flotante.mjs +129 -0
  5. package/fesm2022/jvsoft-components-dialog-flotante.mjs.map +1 -0
  6. package/fesm2022/jvsoft-components-lista-arbol.mjs +282 -0
  7. package/fesm2022/jvsoft-components-lista-arbol.mjs.map +1 -0
  8. package/fesm2022/jvsoft-components-luces-navidad.mjs +33 -0
  9. package/fesm2022/jvsoft-components-luces-navidad.mjs.map +1 -0
  10. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs +47 -0
  11. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs.map +1 -0
  12. package/fesm2022/jvsoft-components-menu.mjs +102 -0
  13. package/fesm2022/jvsoft-components-menu.mjs.map +1 -0
  14. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs +91 -0
  15. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs.map +1 -0
  16. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs +1812 -0
  17. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs.map +1 -0
  18. package/fesm2022/jvsoft-components.mjs +2335 -0
  19. package/fesm2022/jvsoft-components.mjs.map +1 -0
  20. package/{index.ts → index.d.ts} +1 -8
  21. package/lista-arbol/index.d.ts +5 -0
  22. package/lista-arbol/lista-arbol.component.d.ts +58 -0
  23. package/lista-arbol/lista-arbol.functions.d.ts +8 -0
  24. package/luces-navidad/index.d.ts +5 -0
  25. package/luces-navidad/luces-navidad.component.d.ts +11 -0
  26. package/mat-suffix-search-button/index.d.ts +5 -0
  27. package/mat-suffix-search-button/mat-suffix-search-button.component.d.ts +12 -0
  28. package/menu/index.d.ts +5 -0
  29. package/menu/menu.component.d.ts +25 -0
  30. package/menu/menu.interface.d.ts +16 -0
  31. package/package.json +43 -6
  32. package/tabla-mantenimiento/classes/data-model.d.ts +25 -0
  33. package/tabla-mantenimiento/components/progress-bar/index.d.ts +5 -0
  34. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.d.ts +30 -0
  35. package/tabla-mantenimiento/components/progress-bar/public-api.d.ts +1 -0
  36. package/tabla-mantenimiento/index.d.ts +5 -0
  37. package/tabla-mantenimiento/interfaces/{archivo.ts → archivo.d.ts} +4 -7
  38. package/tabla-mantenimiento/interfaces/global/{boton-mantenimiento.ts → boton-mantenimiento.d.ts} +3 -9
  39. package/tabla-mantenimiento/interfaces/global/{columnas-tabla.ts → columnas-tabla.d.ts} +12 -89
  40. package/tabla-mantenimiento/interfaces/global/no-export.d.ts +2 -0
  41. package/tabla-mantenimiento/interfaces/global/{otros.ts → otros.d.ts} +4 -15
  42. package/tabla-mantenimiento/interfaces/implements/{incluye-tabla-mantenimiento.ts → incluye-tabla-mantenimiento.d.ts} +4 -6
  43. package/tabla-mantenimiento/interfaces/implements/{index.ts → index.d.ts} +0 -1
  44. package/tabla-mantenimiento/mat-row-keyboard-selection.directive.d.ts +19 -0
  45. package/tabla-mantenimiento/pipes/no-sanitize.pipe.d.ts +10 -0
  46. package/tabla-mantenimiento/pipes/zero-fill.pipe.d.ts +8 -0
  47. package/tabla-mantenimiento/{public-api.ts → public-api.d.ts} +2 -3
  48. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.d.ts +8 -0
  49. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.d.ts +9 -0
  50. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.d.ts +9 -0
  51. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.d.ts +8 -0
  52. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.d.ts +8 -0
  53. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.d.ts +9 -0
  54. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.d.ts +8 -0
  55. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.d.ts +18 -0
  56. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.module.d.ts +23 -0
  57. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.d.ts +21 -0
  58. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.d.ts +18 -0
  59. package/tabla-mantenimiento/tabla-mantenimiento.component.d.ts +151 -0
  60. package/tabla-mantenimiento/tabla-mantenimiento.functions.d.ts +5 -0
  61. package/tabla-mantenimiento/tabla-mantenimiento.service.d.ts +8 -0
  62. package/tabla-mantenimiento/table-util.d.ts +11 -0
  63. package/CHANGELOG.md +0 -15
  64. package/build.js +0 -20
  65. package/dialog-flotante/dialog-flotante.component.html +0 -66
  66. package/dialog-flotante/dialog-flotante.component.ts +0 -115
  67. package/dialog-flotante/dialog-flotante.interface.ts +0 -13
  68. package/dialog-flotante/index.ts +0 -1
  69. package/dialog-flotante/ng-package.json +0 -5
  70. package/lista-arbol/lista-arbol.component.html +0 -66
  71. package/lista-arbol/lista-arbol.component.ts +0 -238
  72. package/lista-arbol/lista-arbol.functions.ts +0 -46
  73. package/lista-arbol/ng-package.json +0 -5
  74. package/luces-navidad/christmas-tree.png +0 -0
  75. package/luces-navidad/index.ts +0 -1
  76. package/luces-navidad/luces-navidad.component.html +0 -6
  77. package/luces-navidad/luces-navidad.component.ts +0 -24
  78. package/luces-navidad/ng-package.json +0 -5
  79. package/mat-suffix-search-button/index.ts +0 -1
  80. package/mat-suffix-search-button/mat-suffix-search-button.component.html +0 -5
  81. package/mat-suffix-search-button/mat-suffix-search-button.component.ts +0 -36
  82. package/mat-suffix-search-button/ng-package.json +0 -5
  83. package/menu/index.ts +0 -1
  84. package/menu/menu.component.html +0 -40
  85. package/menu/menu.component.ts +0 -88
  86. package/menu/menu.interface.ts +0 -16
  87. package/menu/ng-package.json +0 -5
  88. package/ng-package.json +0 -17
  89. package/progress-spinner.zip +0 -0
  90. package/tabla-mantenimiento/classes/data-model.ts +0 -150
  91. package/tabla-mantenimiento/components/progress-bar/index.ts +0 -1
  92. package/tabla-mantenimiento/components/progress-bar/ng-package.json +0 -5
  93. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.html +0 -10
  94. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.ts +0 -85
  95. package/tabla-mantenimiento/components/progress-bar/public-api.ts +0 -2
  96. package/tabla-mantenimiento/index.ts +0 -1
  97. package/tabla-mantenimiento/interfaces/global/export-excel-servidor.ts +0 -0
  98. package/tabla-mantenimiento/interfaces/global/no-export.ts +0 -11
  99. package/tabla-mantenimiento/mat-row-keyboard-selection.directive.ts +0 -97
  100. package/tabla-mantenimiento/ng-package.json +0 -5
  101. package/tabla-mantenimiento/pipes/no-sanitize.pipe.ts +0 -12
  102. package/tabla-mantenimiento/pipes/zero-fill.pipe.ts +0 -19
  103. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.html +0 -22
  104. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.ts +0 -12
  105. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.html +0 -58
  106. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.ts +0 -19
  107. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.html +0 -40
  108. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.ts +0 -17
  109. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.html +0 -25
  110. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.ts +0 -14
  111. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.html +0 -28
  112. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.ts +0 -13
  113. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.html +0 -30
  114. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.ts +0 -38
  115. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.html +0 -97
  116. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.ts +0 -43
  117. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.html +0 -26
  118. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.ts +0 -36
  119. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.module.ts +0 -54
  120. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.html +0 -76
  121. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.ts +0 -67
  122. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.html +0 -7
  123. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.ts +0 -39
  124. package/tabla-mantenimiento/tabla-mantenimiento.component.html +0 -385
  125. package/tabla-mantenimiento/tabla-mantenimiento.component.ts +0 -951
  126. package/tabla-mantenimiento/tabla-mantenimiento.functions.ts +0 -57
  127. package/tabla-mantenimiento/tabla-mantenimiento.service.ts +0 -44
  128. package/tabla-mantenimiento/table-util.ts +0 -49
  129. package/tabla-mantenimiento.zip +0 -0
  130. package/tsconfig.lib.json +0 -21
  131. package/tsconfig.lib.prod.json +0 -11
  132. package/tsconfig.spec.json +0 -15
  133. package/yarn-error.log +0 -68
  134. /package/dialog-flotante/{public-api.ts → public-api.d.ts} +0 -0
  135. /package/lista-arbol/{public-api.ts → public-api.d.ts} +0 -0
  136. /package/luces-navidad/{public-api.ts → public-api.d.ts} +0 -0
  137. /package/mat-suffix-search-button/{public-api.ts → public-api.d.ts} +0 -0
  138. /package/menu/{public-api.ts → public-api.d.ts} +0 -0
  139. /package/tabla-mantenimiento/interfaces/global/{index.ts → index.d.ts} +0 -0
  140. /package/tabla-mantenimiento/interfaces/{index.ts → index.d.ts} +0 -0
@@ -1,150 +0,0 @@
1
- import {AbstractControl, FormControl, FormControlOptions, FormGroup, ValidationErrors, ValidatorFn, Validators} from '@angular/forms';
2
- import {esNumero} from '../tabla-mantenimiento.functions';
3
-
4
- export class DataModel {
5
- public modelosChk: { [key: string]: boolean | any } = {}; // Usar any para valores dinámicos
6
-
7
- public checkbox: ForCheckboxModel;
8
-
9
- constructor() {
10
- this.checkbox = new ForCheckboxModel(this);
11
- }
12
-
13
- generarId(row: any, campoValor: string[] | string, separador = '') {
14
- if (typeof campoValor == 'string') {
15
- campoValor = [campoValor];
16
- }
17
- return campoValor.map(data => row[data]).join(separador);
18
- }
19
-
20
- // Agrega controles al objeto modelosChk
21
- agregarControles(lista: any[], idLista: string, limpiar = true, campoValor: string[] | string | null = null, campoValorSeparador = '') {
22
-
23
- if (limpiar) {
24
- this.modelosChk = {};
25
- }
26
-
27
- const asignarValor = (dat: any, idLista: string, campoValor: string, key?: string) => {
28
- if (!key) {
29
- key = dat[idLista] + (campoValor.includes('.') ? '':`.${campoValor}`);
30
- }
31
- const mat = campoValor.match(/^([in])[A-Z][a-zA-Z]+/);
32
- if (mat) {
33
- this.modelosChk[key] = dat[campoValor] * 1;
34
- }
35
- else {
36
- this.modelosChk[key] = dat[campoValor];
37
- }
38
- }
39
-
40
-
41
- lista.forEach(dat => {
42
- if (campoValor === null) {
43
- // Caso 1: Sin campoValor, se asigna false
44
- this.modelosChk[dat[idLista]] = false;
45
- }
46
- else if (typeof campoValor === 'string') {
47
- // Caso 2: campoValor es un string
48
- asignarValor(dat, idLista, campoValor, dat[idLista]);
49
- }
50
- else if (campoValorSeparador) {
51
- const idStr = this.generarId(dat, campoValor, campoValorSeparador);
52
- // Caso 2: campoValor es un string
53
- asignarValor(dat, idLista, '.', idStr);
54
- }
55
- else {
56
- // Caso 3: campoValor es un array de strings
57
- campoValor.forEach(data => asignarValor(dat, idLista, data));
58
- }
59
- });
60
- }
61
-
62
- // Establece el estado de un índice
63
- setState(idx: string, state: boolean) {
64
- this.modelosChk[idx] = state;
65
- }
66
-
67
- // Obtiene el estado de un índice
68
- getState(idx: string): boolean | any {
69
- return this.modelosChk[idx];
70
- }
71
-
72
- getDataMultiple(idx: string) {
73
- const camposMod = Object.keys(this.modelosChk).filter(key => key.split('.')[0] == idx);
74
- const vRet: any = {};
75
- camposMod.forEach(key => {
76
- vRet[key.split('.')[1]] = this.modelosChk[key];
77
- });
78
- return vRet;
79
- }
80
-
81
- // Genera una lista basada en el estado de los índices
82
- generarLista(tipoRetorno: 'array' | 'object' | null = null, esCampoNumerico = false): string | object | any[] {
83
- const strLista: string[] = [];
84
- const objLista: { [key: string]: boolean | any } = {};
85
- Object.keys(this.modelosChk).forEach(key => {
86
- if ((esCampoNumerico && esNumero(this.modelosChk[key])) ||
87
- (this.modelosChk[key])
88
- ) {
89
- strLista.push(key);
90
- objLista[key] = this.modelosChk[key];
91
- }
92
- });
93
- if (tipoRetorno === 'array') {
94
- return strLista;
95
- }
96
- if (tipoRetorno === 'object') {
97
- return objLista;
98
- }
99
- return strLista.join(',');
100
- }
101
-
102
- generarFormGroupFromModelosChk(tipo?: string): FormGroup {
103
- const formGroupObj: { [key: string]: FormControl } = {};
104
- let validadores: ValidatorFn | ((control: AbstractControl) => ValidationErrors | null)[] | FormControlOptions | null | undefined = []
105
- if (tipo == 'number') {
106
- validadores = [
107
- Validators.required,
108
- Validators.min(1)
109
- ]
110
- }
111
- Object.keys(this.modelosChk).forEach(key => {
112
- formGroupObj[key] = new FormControl(this.modelosChk[key], validadores);
113
- });
114
- return new FormGroup(formGroupObj);
115
-
116
- // return this.formBuilder.group(formGroupObj);
117
- }
118
- }
119
-
120
- class ForCheckboxModel {
121
- private modeloCheck: DataModel;
122
-
123
- constructor(modeloCheck: DataModel) {
124
- this.modeloCheck = modeloCheck;
125
- }
126
-
127
- get cantidadActivos() {
128
- return Object.values(this.modeloCheck.modelosChk).filter(Boolean).length;
129
- }
130
-
131
- get existenActivados() {
132
- return this.cantidadActivos > 0;
133
- }
134
-
135
- get todosActivos() {
136
- const total = Object.keys(this.modeloCheck.modelosChk).length;
137
- const activos = this.cantidadActivos;
138
- return activos > 0 && total === activos;
139
- }
140
-
141
- get algunosActivos() {
142
- const total = Object.keys(this.modeloCheck.modelosChk).length;
143
- const activos = this.cantidadActivos;
144
- return activos > 0 && total !== activos;
145
- }
146
-
147
- establecerTodos(activo: boolean) {
148
- Object.keys(this.modeloCheck.modelosChk).forEach(idx => this.modeloCheck.modelosChk[idx] = activo);
149
- }
150
- }
@@ -1 +0,0 @@
1
- export * from './public-api'
@@ -1,5 +0,0 @@
1
- {
2
- "lib": {
3
- "entryFile": "public-api.ts"
4
- }
5
- }
@@ -1,10 +0,0 @@
1
- <div class="w-full bg-gray-200 text-gray-700 rounded-full" [class.text-center]="textoCentrado">
2
- <div class="text-xxs font-medium text-center p-1 leading-none rounded-full"
3
- [ngClass]="colorEstilo().class ? colorEstilo().class : 'bg-blue-600 text-blue-100'"
4
- [style]="colorEstilo().style ? colorEstilo().style : ''"
5
- [style.width]="(textoCentrado ? 100 : porcentaje) + '%'"
6
- >
7
- <span *ngIf="textoMostrar else defaultText;" class="whitespace-nowrap">{{ textoMostrar }}</span>
8
- <ng-template #defaultText>{{ porcentaje | number: formatoNumero }}%</ng-template>
9
- </div>
10
- </div>
@@ -1,85 +0,0 @@
1
- import {Component, Input, OnInit} from '@angular/core';
2
- import {CommonModule, DecimalPipe} from '@angular/common';
3
-
4
- export interface EstilosBarra {
5
- valorMaximo: number;
6
- class?: string;
7
- style?: string;
8
- }
9
-
10
- @Component({
11
- selector: 'jvs-progress-bar',
12
- templateUrl: './progress-bar.component.html',
13
- imports: [
14
- CommonModule,
15
- DecimalPipe
16
- ],
17
- host: {
18
- class: 'jvs-progress-bar',
19
- }
20
- })
21
- export class ProgressBarComponent implements OnInit {
22
-
23
- @Input() objThis: any;
24
- @Input() porcentaje = 0;
25
- @Input() textoCentrado = false;
26
-
27
- private _textoMostrar: string = '';
28
- get textoMostrar(): string { return this._textoMostrar; }
29
- @Input() set textoMostrar(val: string) { this._textoMostrar = val; }
30
-
31
- private _formatoNumero: string = '';
32
- get formatoNumero(): string { return this._formatoNumero; }
33
- @Input() set formatoNumero(val: string | undefined) { this._formatoNumero = val ?? '1.0-0'; }
34
-
35
- private _coloresValor: EstilosBarra[] = [];
36
- get coloresValor(): EstilosBarra[] { return this._coloresValor; }
37
- @Input() set coloresValor(val: EstilosBarra[] | undefined ) {
38
- if (!val || !Array.isArray(val)) {
39
- this._coloresValor = [
40
- {valorMaximo: 1, class: 'p-0'},
41
- {valorMaximo: 40, class: 'bg-red-400 text-red-900'},
42
- // {valorMaximo: 35, class: 'bg-red-600 text-red-100'},
43
- {valorMaximo: 80, class: 'bg-yellow-600 text-yellow-100'},
44
- {valorMaximo: 100, class: 'bg-green-600 text-green-100'},
45
- ];
46
- }
47
- else {
48
- this._coloresValor = val;
49
- }
50
- }
51
-
52
- constructor() { }
53
-
54
- ngOnInit(): void {
55
- }
56
-
57
- colorEstilo(): {style: string, class: string} {
58
- let estiloFin = null;
59
- let claseFin = null;
60
- let encontro = false;
61
-
62
- this.coloresValor = this.ordenarPorPropiedad(this.coloresValor, 'valorMaximo');
63
-
64
- this.coloresValor.forEach(estilo => {
65
- if (!encontro && (this.porcentaje <= estilo.valorMaximo)) {
66
- // console.log(this.porcentaje, estilo, (this.porcentaje < estilo.valorMaximo));
67
- encontro = true;
68
- estiloFin = estilo.style;
69
- claseFin = estilo.class;
70
- }
71
- });
72
- return {
73
- style: estiloFin ?? '',
74
- class: claseFin ?? '',
75
- };
76
- }
77
-
78
- ordenarPorPropiedad(objData: any[], propiedad: string, numeros = false) {
79
- if (numeros) {
80
- return objData.sort((a, b) => a[propiedad] - b[propiedad]);
81
- }
82
- return objData.sort((a, b) => (a[propiedad] > b[propiedad]) ? 1:((b[propiedad] > a[propiedad]) ? -1:0));
83
- }
84
-
85
- }
@@ -1,2 +0,0 @@
1
- export * from './progress-bar.component';
2
- // export * from './progress-spinner.service';
@@ -1 +0,0 @@
1
- export * from './public-api'
@@ -1,11 +0,0 @@
1
- export type TipoValorFuncion<T> = T | ((...param: any) => T);
2
-
3
- export function tipoValorFuncion<T>(datoParam: TipoValorFuncion<T>, defaultValue?: T, ...param: any[]): T | undefined {
4
- if (datoParam === undefined || datoParam === null) {
5
- return defaultValue; // Retorna el valor por defecto si es undefined
6
- }
7
- if (typeof datoParam === 'function') {
8
- return (datoParam as (...args: any) => T)(...param);
9
- }
10
- return datoParam;
11
- }
@@ -1,97 +0,0 @@
1
- import {Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output} from '@angular/core';
2
- import {MatTable, MatTableDataSource} from '@angular/material/table';
3
- import {Subject, takeUntil} from 'rxjs';
4
-
5
- @Directive({
6
- selector: '[matRowKeyboardSelection]'
7
- })
8
- export class MatRowKeyboardSelectionDirective implements OnInit, OnDestroy {
9
-
10
- private rows!: HTMLElement[];
11
- private renderedData!: any[];
12
-
13
- @Input('matRowKeyboardSelection') tabla!: MatTable<any>; // Entrada: Referencia a la tabla
14
- @Input() rowModel: any; // Entrada: Modelo de fila actual
15
- @Output() seleccionarSiguiente = new EventEmitter(); // Salida: Evento al seleccionar siguiente
16
-
17
- private unsubscriber$ = new Subject();
18
-
19
- constructor(private el: ElementRef) {}
20
-
21
- ngOnInit(): void {
22
- // Asignar tabindex si no está definido
23
- if (this.el.nativeElement.tabIndex < 0) {
24
- this.el.nativeElement.tabIndex = 0;
25
- }
26
-
27
- // Obtener la fuente de datos de la tabla
28
- const dataSource = this.tabla.dataSource as MatTableDataSource<any>;
29
-
30
- // Suscribirse a los cambios en los datos
31
- dataSource.connect().pipe(takeUntil(this.unsubscriber$)).subscribe(data => {
32
- this.renderedData = data;
33
- this.rows = Array.from(<NodeListOf<HTMLElement>>this.getTableRows());
34
- });
35
- }
36
-
37
- ngOnDestroy(): void {
38
- // Finalizar la suscripción al destruir la directiva
39
- this.unsubscriber$.next(null);
40
- this.unsubscriber$.complete();
41
- }
42
-
43
- @HostListener('keydown', ['$event']) onKeydown(event: KeyboardEvent): void {
44
- var element = event.target as HTMLElement;
45
- if (element.tagName === "INPUT") {
46
- event.stopPropagation();
47
- }
48
- else {
49
- const currentIndex = this.renderedData.findIndex(row => row === this.rowModel);
50
- const eRef = event.target as HTMLElement;
51
- this.rows = this.rows.filter(elem => elem.hasAttribute('id'));
52
- const arrayFilas = Array.from(this.rows);
53
-
54
- const fElem = arrayFilas.filter(elem => elem.id == eRef.id).pop();
55
- const cElemIdx = arrayFilas.findIndex(elem => elem == fElem);
56
-
57
- let newRow: HTMLElement | undefined;
58
-
59
- // Controlar las teclas presionadas
60
- switch (event.key) {
61
- case 'ArrowDown':
62
- newRow = this.rows[cElemIdx + 1];
63
- break;
64
- case 'ArrowUp':
65
- newRow = this.rows[cElemIdx - 1];
66
- break;
67
- case 'Enter':
68
- case ' ':
69
- this.seleccionarSiguiente.next(this.renderedData[currentIndex]);
70
- event.preventDefault();
71
- break;
72
- }
73
-
74
- // Enfocar la nueva fila seleccionada
75
- if (newRow) {
76
- newRow.classList.add('estaFocus');
77
- newRow.focus();
78
- }
79
- }
80
- }
81
-
82
- private getTableRows(): NodeListOf<HTMLElement> | undefined {
83
- let el = this.el.nativeElement;
84
-
85
- // Recorrer los elementos padres hasta encontrar la tabla
86
- while (el && el.parentNode) {
87
- el = el.parentNode;
88
-
89
- // Verificar si es una tabla de material
90
- if (el.tagName && el.tagName.toLowerCase() === 'mat-table' || el.hasAttribute('mat-table')) {
91
- return el.querySelectorAll('mat-row, tr[mat-row]');
92
- }
93
- }
94
-
95
- return undefined;
96
- }
97
- }
@@ -1,5 +0,0 @@
1
- {
2
- "lib": {
3
- "entryFile": "public-api.ts"
4
- }
5
- }
@@ -1,12 +0,0 @@
1
- import {Pipe, PipeTransform} from '@angular/core';
2
- import {DomSanitizer, SafeHtml} from '@angular/platform-browser';
3
-
4
- @Pipe({ name: 'noSanitize' })
5
- export class NoSanitizePipe implements PipeTransform {
6
- constructor(private domSanitizer: DomSanitizer) {
7
-
8
- }
9
- transform(html: string): SafeHtml {
10
- return this.domSanitizer.bypassSecurityTrustHtml(html);
11
- }
12
- }
@@ -1,19 +0,0 @@
1
- import {Pipe, PipeTransform} from '@angular/core';
2
-
3
- @Pipe({
4
- name: 'zeroFill',
5
- })
6
- export class ZeroFillPipe implements PipeTransform {
7
-
8
- transform(value: unknown, digitos: number, ...args: unknown[]) {
9
- let s = value + '';
10
- while (s.length < digitos) {
11
- s = '0' + s;
12
- }
13
- return s;
14
- }
15
-
16
- }
17
- export function zeroFill(value: unknown, digitos: number, ...args: unknown[]) {
18
- return new ZeroFillPipe().transform(value, digitos, args);
19
- }
@@ -1,22 +0,0 @@
1
- <ng-template #cellTemplate let-row="row">
2
- {{ row[column.property] | date: (column.format ? column.format : 'dd/MM/yyyy') }}
3
- </ng-template>
4
-
5
- <ng-container matColumnDef="{{ column.property }}">
6
- <!-- Definición del encabezado de la columna -->
7
- <th *matHeaderCellDef [ngClass]="column.cssClassesTH" class="uppercase text-center" mat-header-cell mat-sort-header
8
- [disabled]="column.sort === false">
9
- <span [innerHTML]="column.label ?? ''">{{ column.label }} </span>
10
- </th>
11
-
12
- <!-- Cuerpo de la celda, definido por los hijos -->
13
- <td *matCellDef="let row" [ngClass]="column.cssClasses" mat-cell (click)="accionClick(row, $event)">
14
-
15
- <ng-container [ngTemplateOutlet]="cellTemplate" [ngTemplateOutletContext]="{row}"></ng-container>
16
-
17
- </td>
18
-
19
- <th *matFooterCellDef [ngClass]="column.cssFooterClasses" mat-footer-cell>
20
- {{ column.transformarFooter ? column.transformarFooter() : '' }}
21
- </th>
22
- </ng-container>
@@ -1,12 +0,0 @@
1
- import {Component, Input} from '@angular/core';
2
- import {ColumnaDate} from '../../../interfaces';
3
- import {ColumnTypeComponent} from '../column-type.component';
4
-
5
- @Component({
6
- selector: 'jvs-column-type-date',
7
- standalone: false,
8
- templateUrl: './column-type-date.component.html'
9
- })
10
- export class ColumnTypeDateComponent<T> extends ColumnTypeComponent<T> {
11
- @Input({required: true}) override column: ColumnaDate<T> = {} as ColumnaDate<T>;
12
- }
@@ -1,58 +0,0 @@
1
- <ng-template #cellTemplate let-row="row">
2
- <div class="flex items-center justify-center" [ngClass]="{ '-space-x-1': !column.iconsDef?.soloIcono }"
3
- >
4
- <ng-container *ngFor="let icon of obtenerItems(column.iconsDef, row)">
5
- <ng-container *ngIf="!column.iconsDef?.soloIcono; else soloIcono">
6
- <button matRipple type="button" *ngIf="!icon.esVisible || icon.esVisible(row)"
7
- (click)="icon.click ? icon.click(row) : false; $event.stopPropagation()"
8
- class="flex items-center justify-center p-1 rounded border shadow-sm hover:shadow-lg"
9
- [ngClass]="icon.contentCss"
10
- [matTooltip]="icon.toolTip ?? row[icon.toolTipField ?? '_field_']"
11
- [matTooltipDisabled]="!icon.toolTip && !icon.toolTipField"
12
- >
13
- <ng-container [ngTemplateOutlet]="iconoConTamanio"
14
- [ngTemplateOutletContext]="{icon: icon.icon, iconClass: icon.cssClass, size: (icon.iconSize ?? column.iconsDef?.iconSize)}"></ng-container>
15
- </button>
16
- </ng-container>
17
- <ng-template #soloIcono>
18
- <div *ngIf="!icon.esVisible || icon.esVisible(row)" [ngClass]="icon.contentCss"
19
- class="flex items-center"
20
- [matTooltip]="icon.toolTip ?? row[icon.toolTipField ?? '_field_']"
21
- [matTooltipDisabled]="!icon.toolTip && !icon.toolTipField"
22
- >
23
- <ng-container [ngTemplateOutlet]="iconoConTamanio"
24
- [ngTemplateOutletContext]="{icon: icon.icon, iconClass: icon.cssClass, size: (icon.iconSize ?? column.iconsDef?.iconSize)}"></ng-container>
25
- </div>
26
- </ng-template>
27
- </ng-container>
28
- </div>
29
- </ng-template>
30
-
31
- <ng-container matColumnDef="{{ column.property }}">
32
- <!-- Definición del encabezado de la columna -->
33
- <th *matHeaderCellDef [ngClass]="column.cssClassesTH" class="uppercase text-center" mat-header-cell mat-sort-header
34
- [disabled]="column.sort === false">
35
- <span [innerHTML]="column.label ?? ''">{{ column.label }} </span>
36
- </th>
37
-
38
- <!-- Cuerpo de la celda, definido por los hijos -->
39
- <td *matCellDef="let row" [ngClass]="column.cssClasses" mat-cell (click)="accionClick(row, $event)">
40
-
41
- <ng-container [ngTemplateOutlet]="cellTemplate" [ngTemplateOutletContext]="{row}"></ng-container>
42
-
43
- </td>
44
-
45
- <th *matFooterCellDef [ngClass]="column.cssFooterClasses" mat-footer-cell>
46
- {{ column.transformarFooter ? column.transformarFooter() : '' }}
47
- </th>
48
- </ng-container>
49
-
50
-
51
- <ng-template #iconoConTamanio let-icon="icon" let-iconClass="iconClass" let-size="size">
52
- <mat-icon *ngIf="size" [svgIcon]="icon" [ngClass]="iconClass" [inline]="true"
53
- [style.font-size]="size"
54
- [style.height]="size"
55
- [style.width]="size"
56
- ></mat-icon>
57
- <mat-icon *ngIf="!size" [svgIcon]="icon" [ngClass]="iconClass"></mat-icon>
58
- </ng-template>
@@ -1,19 +0,0 @@
1
- import {Component, Input} from '@angular/core';
2
- import {ColumnaIcons, IconsIcon} from '../../../interfaces';
3
- import {ColumnTypeComponent} from '../column-type.component';
4
-
5
- @Component({
6
- selector: 'jvs-column-type-icons',
7
- standalone: false,
8
- templateUrl: './column-type-icons.component.html'
9
- })
10
- export class ColumnTypeIconsComponent<T> extends ColumnTypeComponent<T> {
11
- @Input({required: true}) override column: ColumnaIcons<T> = {} as ColumnaIcons<T>;
12
-
13
- obtenerItems(columna: any, row: any): IconsIcon[] {
14
- if (typeof columna.items === 'function') {
15
- return columna.items(row);
16
- }
17
- return columna.items;
18
- }
19
- }
@@ -1,40 +0,0 @@
1
- <ng-template #cellTemplate let-row="row">
2
- <span [ngClass]="column.textCss"
3
- [class.text-sky-700]="(value(row)) >= 0" [class.text-red-700]="(value(row)) < 0"
4
- *ngIf="value(row)"
5
- (click)="accionClick(row, $event)">{{ value(row) | number: (column.format || '1.2-2') }}</span>
6
- </ng-template>
7
- <ng-template #columnFooterTemplate let-row="row">
8
- <span *ngIf="column.transformarFooter"
9
- [class.text-sky-700]="column.transformarFooter() >= 0"
10
- [class.text-red-700]="column.transformarFooter() < 0"
11
- >
12
- <span>{{ column.transformarFooter() | currency: column.simboloMoneda ?? 'S/' }}</span>
13
- </span>
14
- </ng-template>
15
-
16
- <!--<jvs-column-type [column]="column" [cellTemplate]="cellTemplate" [columnFooterTemplate]="columnFooterTemplate"></jvs-column-type>-->
17
-
18
- <ng-container matColumnDef="{{ column.property }}">
19
- <!-- Definición del encabezado de la columna -->
20
- <th *matHeaderCellDef [ngClass]="column.cssClassesTH" class="uppercase text-center" mat-header-cell mat-sort-header
21
- [disabled]="column.sort === false">
22
- <span [innerHTML]="column.label ?? ''">{{ column.label }} </span>
23
- </th>
24
-
25
- <!-- Cuerpo de la celda, definido por los hijos -->
26
- <td *matCellDef="let row" [ngClass]="column.cssClasses" mat-cell (click)="accionClick(row, $event)">
27
-
28
- <ng-container [ngTemplateOutlet]="cellTemplate" [ngTemplateOutletContext]="{row}"></ng-container>
29
-
30
- </td>
31
-
32
- <th *matFooterCellDef [ngClass]="column.cssFooterClasses" mat-footer-cell>
33
- <span *ngIf="column.transformarFooter"
34
- [class.text-sky-700]="column.transformarFooter() >= 0"
35
- [class.text-red-700]="column.transformarFooter() < 0"
36
- >
37
- <span>{{ column.transformarFooter() | currency: column.simboloMoneda ?? 'S/' }}</span>
38
- </span>
39
- </th>
40
- </ng-container>
@@ -1,17 +0,0 @@
1
- import {Component, Input} from '@angular/core';
2
- import {ColumnaMoney} from '../../../interfaces';
3
- import {ColumnTypeComponent} from '../column-type.component';
4
-
5
- @Component({
6
- selector: 'jvs-column-type-money',
7
- templateUrl: './column-type-money.component.html',
8
- standalone: false,
9
- })
10
- export class ColumnTypeMoneyComponent<T> extends ColumnTypeComponent<T> {
11
- @Input({required: true}) override column: ColumnaMoney<T> = {} as ColumnaMoney<T>;
12
-
13
-
14
- value(row: any): number {
15
- return (this.column.transformar ? this.column.transformar(row):row[this.column.property]);
16
- }
17
- }
@@ -1,25 +0,0 @@
1
-
2
- <ng-template #cellTemplate let-row="row">
3
- <span *ngIf="column.property && row[column.property]" class="!text-indigo-900 font-semibold">
4
- {{ row[column.property] | number: (column.format ? column.format : '1.0-2') }}
5
- </span>
6
- </ng-template>
7
-
8
- <ng-container matColumnDef="{{ column.property }}">
9
- <!-- Definición del encabezado de la columna -->
10
- <th *matHeaderCellDef [ngClass]="column.cssClassesTH" class="uppercase text-center" mat-header-cell mat-sort-header
11
- [disabled]="column.sort === false">
12
- <span [innerHTML]="column.label ?? ''">{{ column.label }} </span>
13
- </th>
14
-
15
- <!-- Cuerpo de la celda, definido por los hijos -->
16
- <td *matCellDef="let row" [ngClass]="column.cssClasses" mat-cell (click)="accionClick(row, $event)">
17
-
18
- <ng-container [ngTemplateOutlet]="cellTemplate" [ngTemplateOutletContext]="{row}"></ng-container>
19
-
20
- </td>
21
-
22
- <th *matFooterCellDef [ngClass]="column.cssFooterClasses" mat-footer-cell>
23
- {{ column.transformarFooter ? column.transformarFooter() : '' }}
24
- </th>
25
- </ng-container>
@@ -1,14 +0,0 @@
1
- import {Component, Input} from '@angular/core';
2
- import {ColumnaNumber} from '../../../interfaces';
3
- import {ColumnTypeComponent} from '../column-type.component';
4
-
5
-
6
- @Component({
7
- selector: 'jvs-column-type-number',
8
- standalone: false,
9
- templateUrl: './column-type-number.component.html'
10
- })
11
- export class ColumnTypeNumberComponent<T> extends ColumnTypeComponent<T> {
12
- @Input({required: true}) override column: ColumnaNumber<T> = {} as ColumnaNumber<T>;
13
-
14
- }
@@ -1,28 +0,0 @@
1
- <ng-template #cellTemplate let-row="row">
2
- <jvs-progress-bar
3
- [textoCentrado]="!!column.progressbar.textoCentrado"
4
- [porcentaje]="column.progressbar.porcentaje(row)"
5
- [coloresValor]="column.progressbar.coloresValor"
6
- [formatoNumero]="column.progressbar.formatoNumero"
7
- [textoMostrar]="column.progressbar.textoMostrar ? column.progressbar.textoMostrar(row) : ''"
8
- ></jvs-progress-bar>
9
- </ng-template>
10
-
11
- <ng-container matColumnDef="{{ column.property }}">
12
- <!-- Definición del encabezado de la columna -->
13
- <th *matHeaderCellDef [ngClass]="column.cssClassesTH" class="uppercase text-center" mat-header-cell mat-sort-header
14
- [disabled]="column.sort === false">
15
- <span [innerHTML]="column.label ?? ''">{{ column.label }} </span>
16
- </th>
17
-
18
- <!-- Cuerpo de la celda, definido por los hijos -->
19
- <td *matCellDef="let row" [ngClass]="column.cssClasses" mat-cell (click)="accionClick(row, $event)">
20
-
21
- <ng-container [ngTemplateOutlet]="cellTemplate" [ngTemplateOutletContext]="{row}"></ng-container>
22
-
23
- </td>
24
-
25
- <th *matFooterCellDef [ngClass]="column.cssFooterClasses" mat-footer-cell>
26
- {{ column.transformarFooter ? column.transformarFooter() : '' }}
27
- </th>
28
- </ng-container>