@jvsoft/components 0.0.10 → 0.0.12

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 (141) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/build.js +20 -0
  3. package/dialog-flotante/dialog-flotante.component.html +66 -0
  4. package/dialog-flotante/dialog-flotante.component.ts +115 -0
  5. package/dialog-flotante/dialog-flotante.interface.ts +13 -0
  6. package/dialog-flotante/index.ts +1 -0
  7. package/dialog-flotante/ng-package.json +5 -0
  8. package/{index.d.ts → index.ts} +8 -1
  9. package/lista-arbol/lista-arbol.component.html +66 -0
  10. package/lista-arbol/lista-arbol.component.ts +238 -0
  11. package/lista-arbol/lista-arbol.functions.ts +46 -0
  12. package/lista-arbol/ng-package.json +5 -0
  13. package/luces-navidad/christmas-tree.png +0 -0
  14. package/luces-navidad/index.ts +1 -0
  15. package/luces-navidad/luces-navidad.component.html +6 -0
  16. package/luces-navidad/luces-navidad.component.ts +24 -0
  17. package/luces-navidad/ng-package.json +5 -0
  18. package/mat-suffix-search-button/index.ts +1 -0
  19. package/mat-suffix-search-button/mat-suffix-search-button.component.html +5 -0
  20. package/mat-suffix-search-button/mat-suffix-search-button.component.ts +36 -0
  21. package/mat-suffix-search-button/ng-package.json +5 -0
  22. package/menu/index.ts +1 -0
  23. package/menu/menu.component.html +40 -0
  24. package/menu/menu.component.ts +88 -0
  25. package/menu/menu.interface.ts +16 -0
  26. package/menu/ng-package.json +5 -0
  27. package/ng-package.json +17 -0
  28. package/package.json +17 -42
  29. package/progress-spinner.zip +0 -0
  30. package/tabla-mantenimiento/classes/data-model.ts +150 -0
  31. package/tabla-mantenimiento/components/progress-bar/index.ts +1 -0
  32. package/tabla-mantenimiento/components/progress-bar/ng-package.json +5 -0
  33. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.html +10 -0
  34. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.ts +85 -0
  35. package/tabla-mantenimiento/components/progress-bar/public-api.ts +2 -0
  36. package/tabla-mantenimiento/index.ts +1 -0
  37. package/tabla-mantenimiento/interfaces/{archivo.d.ts → archivo.ts} +7 -4
  38. package/tabla-mantenimiento/interfaces/global/{boton-mantenimiento.d.ts → boton-mantenimiento.ts} +9 -3
  39. package/tabla-mantenimiento/interfaces/global/{columnas-tabla.d.ts → columnas-tabla.ts} +90 -13
  40. package/tabla-mantenimiento/interfaces/global/export-excel-servidor.ts +0 -0
  41. package/tabla-mantenimiento/interfaces/global/no-export.ts +11 -0
  42. package/tabla-mantenimiento/interfaces/global/{otros.d.ts → otros.ts} +15 -3
  43. package/tabla-mantenimiento/interfaces/implements/{incluye-tabla-mantenimiento.d.ts → incluye-tabla-mantenimiento.ts} +6 -4
  44. package/tabla-mantenimiento/interfaces/implements/{index.d.ts → index.ts} +1 -0
  45. package/tabla-mantenimiento/mat-row-keyboard-selection.directive.ts +97 -0
  46. package/tabla-mantenimiento/ng-package.json +5 -0
  47. package/tabla-mantenimiento/pipes/no-sanitize.pipe.ts +12 -0
  48. package/tabla-mantenimiento/pipes/zero-fill.pipe.ts +19 -0
  49. package/tabla-mantenimiento/{public-api.d.ts → public-api.ts} +3 -2
  50. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.html +22 -0
  51. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.ts +12 -0
  52. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.html +58 -0
  53. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.ts +19 -0
  54. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.html +40 -0
  55. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.ts +17 -0
  56. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.html +25 -0
  57. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.ts +14 -0
  58. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.html +28 -0
  59. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.ts +13 -0
  60. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.html +30 -0
  61. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.ts +38 -0
  62. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.html +97 -0
  63. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.ts +43 -0
  64. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.html +26 -0
  65. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.ts +36 -0
  66. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.module.ts +54 -0
  67. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.html +76 -0
  68. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.ts +67 -0
  69. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.html +7 -0
  70. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.ts +39 -0
  71. package/tabla-mantenimiento/tabla-mantenimiento.component.html +385 -0
  72. package/tabla-mantenimiento/tabla-mantenimiento.component.ts +951 -0
  73. package/tabla-mantenimiento/tabla-mantenimiento.functions.ts +57 -0
  74. package/tabla-mantenimiento/tabla-mantenimiento.service.ts +44 -0
  75. package/tabla-mantenimiento/table-util.ts +49 -0
  76. package/tabla-mantenimiento.zip +0 -0
  77. package/tsconfig.lib.json +16 -0
  78. package/tsconfig.lib.prod.json +11 -0
  79. package/tsconfig.spec.json +15 -0
  80. package/yarn-error.log +68 -0
  81. package/dialog-flotante/dialog-flotante.component.d.ts +0 -32
  82. package/dialog-flotante/dialog-flotante.interface.d.ts +0 -11
  83. package/dialog-flotante/index.d.ts +0 -5
  84. package/fesm2022/jvsoft-components-dialog-flotante.mjs +0 -130
  85. package/fesm2022/jvsoft-components-dialog-flotante.mjs.map +0 -1
  86. package/fesm2022/jvsoft-components-lista-arbol.mjs +0 -266
  87. package/fesm2022/jvsoft-components-lista-arbol.mjs.map +0 -1
  88. package/fesm2022/jvsoft-components-luces-navidad.mjs +0 -33
  89. package/fesm2022/jvsoft-components-luces-navidad.mjs.map +0 -1
  90. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs +0 -47
  91. package/fesm2022/jvsoft-components-mat-suffix-search-button.mjs.map +0 -1
  92. package/fesm2022/jvsoft-components-menu.mjs +0 -102
  93. package/fesm2022/jvsoft-components-menu.mjs.map +0 -1
  94. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs +0 -91
  95. package/fesm2022/jvsoft-components-tabla-mantenimiento-components-progress-bar.mjs.map +0 -1
  96. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs +0 -1801
  97. package/fesm2022/jvsoft-components-tabla-mantenimiento.mjs.map +0 -1
  98. package/fesm2022/jvsoft-components.mjs +0 -2309
  99. package/fesm2022/jvsoft-components.mjs.map +0 -1
  100. package/lista-arbol/index.d.ts +0 -5
  101. package/lista-arbol/lista-arbol.component.d.ts +0 -58
  102. package/lista-arbol/lista-arbol.functions.d.ts +0 -1
  103. package/luces-navidad/index.d.ts +0 -5
  104. package/luces-navidad/luces-navidad.component.d.ts +0 -11
  105. package/mat-suffix-search-button/index.d.ts +0 -5
  106. package/mat-suffix-search-button/mat-suffix-search-button.component.d.ts +0 -12
  107. package/menu/index.d.ts +0 -5
  108. package/menu/menu.component.d.ts +0 -25
  109. package/menu/menu.interface.d.ts +0 -16
  110. package/src/styles/base-jvsoft-components.css +0 -9
  111. package/tabla-mantenimiento/classes/data-model.d.ts +0 -25
  112. package/tabla-mantenimiento/components/progress-bar/index.d.ts +0 -5
  113. package/tabla-mantenimiento/components/progress-bar/progress-bar.component.d.ts +0 -30
  114. package/tabla-mantenimiento/components/progress-bar/public-api.d.ts +0 -1
  115. package/tabla-mantenimiento/index.d.ts +0 -5
  116. package/tabla-mantenimiento/interfaces/global/no-export.d.ts +0 -2
  117. package/tabla-mantenimiento/mat-row-keyboard-selection.directive.d.ts +0 -19
  118. package/tabla-mantenimiento/pipes/no-sanitize.pipe.d.ts +0 -10
  119. package/tabla-mantenimiento/pipes/zero-fill.pipe.d.ts +0 -8
  120. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-date/column-type-date.component.d.ts +0 -8
  121. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-icons/column-type-icons.component.d.ts +0 -9
  122. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-money/column-type-money.component.d.ts +0 -9
  123. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-number/column-type-number.component.d.ts +0 -8
  124. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-progressbar/column-type-progressbar.component.d.ts +0 -8
  125. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-sino/column-type-sino.component.d.ts +0 -9
  126. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type-text/column-type-text.component.d.ts +0 -8
  127. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.component.d.ts +0 -18
  128. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/column-type/column-type.module.d.ts +0 -23
  129. package/tabla-mantenimiento/tabla-mantenimiento-column-defs/tabla-mantenimiento-column-defs.component.d.ts +0 -21
  130. package/tabla-mantenimiento/tabla-mantenimiento-menu/tabla-mantenimiento-menu.component.d.ts +0 -18
  131. package/tabla-mantenimiento/tabla-mantenimiento.component.d.ts +0 -147
  132. package/tabla-mantenimiento/tabla-mantenimiento.functions.d.ts +0 -5
  133. package/tabla-mantenimiento/tabla-mantenimiento.service.d.ts +0 -8
  134. package/tabla-mantenimiento/table-util.d.ts +0 -11
  135. /package/dialog-flotante/{public-api.d.ts → public-api.ts} +0 -0
  136. /package/lista-arbol/{public-api.d.ts → public-api.ts} +0 -0
  137. /package/luces-navidad/{public-api.d.ts → public-api.ts} +0 -0
  138. /package/mat-suffix-search-button/{public-api.d.ts → public-api.ts} +0 -0
  139. /package/menu/{public-api.d.ts → public-api.ts} +0 -0
  140. /package/tabla-mantenimiento/interfaces/global/{index.d.ts → index.ts} +0 -0
  141. /package/tabla-mantenimiento/interfaces/{index.d.ts → index.ts} +0 -0
@@ -0,0 +1,385 @@
1
+ <div class="flex flex-col h-fit">
2
+ <div class="grow flex items-center justify-between bg-white">
3
+ <ng-content select="[filtro]"></ng-content>
4
+ </div>
5
+
6
+ <div class="flex flex-col border-t">
7
+ <div class="flex-1 bg-app-bar flex items-center justify-between p-1">
8
+ <!-- <div class="hidden flex-1 sm:flex items-center flex-wrap gap-1">-->
9
+ <!-- </div>-->
10
+ <div class="flex items-center flex-wrap mr-1 h-full" *ngIf="leyenda">
11
+ <span class="font-bold" [class]="leyenda.class">{{ leyenda.text }}</span>
12
+ </div>
13
+ <div class="hidden flex-1 sm:flex items-center flex-wrap gap-1">
14
+ <div *ngIf="(botonesMenuFinal.izquierda ?? []).length > 0 " class=" flex items-center flex-wrap contenedor-botones">
15
+ <ng-container *ngFor="let btn of botonesMenu.izquierda; let idx = index;">
16
+ <ng-container *ngTemplateOutlet="botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.izquierda?.length}}"></ng-container>
17
+ </ng-container>
18
+ </div>
19
+
20
+ <div *ngIf="(botonesMenuFinal.crud ?? []).length > 0" class=" flex items-center flex-wrap contenedor-botones">
21
+ <ng-container *ngFor="let btn of botonesMenu.crud; let idx = index;">
22
+ <ng-container *ngTemplateOutlet="botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.crud?.length}}"></ng-container>
23
+ </ng-container>
24
+ </div>
25
+
26
+ <div *ngIf="(botonesMenuFinal.principal ?? []).length > 0" class=" flex items-center flex-wrap contenedor-botones">
27
+ <ng-container *ngFor="let btn of botonesMenu.principal; let idx = index;">
28
+ <ng-container *ngTemplateOutlet="botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.principal?.length}}"></ng-container>
29
+ </ng-container>
30
+ </div>
31
+
32
+ <div *ngIf="(botonesMenuFinal.derecha ?? []).length > 0" class="flex-auto flex items-center justify-end contenedor-botones">
33
+ <ng-container *ngFor="let btn of botonesMenu.derecha; let idx = index;">
34
+ <ng-container *ngTemplateOutlet="botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.derecha?.length}}"></ng-container>
35
+ </ng-container>
36
+ </div>
37
+ <ng-content select="[objetosMenuPegado]"></ng-content>
38
+ </div>
39
+ <div class="flex flex-1 sm:hidden items-center flex-wrap gap-1">
40
+ <button class="flex items-center justify-center text-2xs leading-none rounded-full p-1"
41
+ matRipple
42
+ matTooltip="Botones de Acción"
43
+ type="button"
44
+ [matMenuTriggerFor]="menuOpciones"
45
+ >
46
+ <mat-icon class="icon-xs" svgIcon="roundMenu"></mat-icon>
47
+ </button>
48
+ </div>
49
+ <div class="flex-none flex items-center justify-end border-l-2">
50
+ <div class="flex-1 sm:flex-none flex items-center justify-end">
51
+ <ng-content select="[objetosMenu]"></ng-content>
52
+ </div>
53
+ </div>
54
+ <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"
55
+ >
56
+ <mat-icon svgIcon="roundSearch" class="icon-xs"></mat-icon>
57
+ <input [formControl]="cCampoBusqueda"
58
+ class="text-xs px-1 py-1 border-0 outline-none w-full bg-transparent max-w-sm"
59
+ [placeholder]="ctrlBusquedaPlaceholder"
60
+ (keyup.enter)="ctrlBusqueda == 'query' ? cargarData() : false;"
61
+ type="search">
62
+ </div>
63
+ <div class="flex-none flex items-center justify-end border-l-2">
64
+ <ng-content select="[botonesFiltro]"></ng-content>
65
+ <button matRipple *ngIf="isRecargarUsed || ctrlBusqueda == 'query'"
66
+ class="flex items-center justify-center text-2xs leading-none rounded-full p-1 text-green-700"
67
+ matTooltip="Actualizar datos"
68
+ (click)="(ctrlBusqueda == 'query' ? cargarData() : emitirAccionRecargar())"
69
+ type="button">
70
+ <mat-icon svgIcon="roundRefresh" class="icon-xs"></mat-icon>
71
+
72
+ </button>
73
+ <button matRipple [matMenuTriggerFor]="columnFilterMenu" *ngIf="filtroCampos"
74
+ class="flex items-center justify-center text-2xs leading-none rounded-full p-1"
75
+ matTooltip="Columnas Filtro"
76
+ type="button">
77
+ <mat-icon svgIcon="roundFilterList" class="icon-xs"></mat-icon>
78
+ </button>
79
+ </div>
80
+ </div>
81
+
82
+ <div *ngIf="(botonesMenuFinal.secundario ?? []).length > 0" class="flex-1 bg-app-bar flex items-center justify-between p-1 border-t">
83
+ <div class="hidden flex-1 sm:flex items-center flex-wrap gap-1">
84
+ <div class=" flex items-center flex-wrap contenedor-botones">
85
+ <ng-container *ngFor="let btn of botonesMenu.secundario; let idx = index;">
86
+ <ng-container *ngTemplateOutlet="botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.secundario?.length}}"></ng-container>
87
+ </ng-container>
88
+ </div>
89
+ </div>
90
+ </div>
91
+ <!--<div class="grow flex flex-col items-stretch contenedor-tabla" [ngClass]="{'table-container overflow-auto': esTabla}">
92
+ <pre>{{ this.chkLista.modelosChk | json }}</pre>
93
+ <pre>{{ this.chkLista.checkbox.cantidadActivos | json }}</pre>
94
+ <pre>{{ this.chkLista.checkbox.algunosActivos | json }}</pre>
95
+ </div>-->
96
+ <div class="grow flex flex-col items-stretch contenedor-tabla" [ngClass]="{'table-container overflow-auto': esTabla}">
97
+ <ng-content select="[cuerpo]"></ng-content>
98
+
99
+ <table [id]="'tabla_' + nombreColeccion" [dataSource]="dataSource" [multiTemplateDataRows]="true"
100
+ [hidden]="!esTabla"
101
+ class="flex-1 table-mantenimiento table-auto h-fit" mat-table matSort
102
+ [trackBy]="trackByFn"
103
+ #tablaMantenimiento
104
+ >
105
+
106
+ <!--<table [dataSource]="dataSource" class="table-mantenimiento table-auto h-auto w-full justify-center" mat-table matSort>-->
107
+
108
+
109
+ <ng-content select="[tableDefinitions]"></ng-content>
110
+ <ng-container matColumnDef="numeracion_automatica">
111
+ <th mat-header-cell *matHeaderCellDef style="width: 16px !important">Nº</th>
112
+ <td mat-cell *matCellDef="let element; let i = dataIndex" class="p-0 celda-numeracion-fila">
113
+ <div class="flex items-center justify-center font-bold numeracionFila">
114
+ <ng-container *ngIf="esTabla && paginador">
115
+ {{ (this.paginator?.pageIndex == 0 ? i + 1 : 1 + i + (this.paginator?.pageIndex ?? 1) * (this.paginator?.pageSize ?? 1)) }}
116
+ </ng-container>
117
+ <ng-container *ngIf="!paginador">
118
+ {{ (i + 1) }}
119
+ </ng-container>
120
+ </div>
121
+ </td>
122
+ <td mat-footer-cell *matFooterCellDef class="uppercase"></td>
123
+ </ng-container>
124
+ <jvs-tabla-mantenimiento-column-defs [objThis]="this" [colDetalle]="columnasTabla"
125
+ [nombreColeccion]="nombreColeccion" [(chkLista)]="chkLista"></jvs-tabla-mantenimiento-column-defs>
126
+
127
+ <tr *matHeaderRowDef="visibleColumns; sticky: true" mat-header-row class="title" matHeader
128
+ ></tr>
129
+
130
+ <ng-container *ngIf="!!filaExtraHeader">
131
+ <tr mat-row *matRowDef="let row; columns: ['filaExtraHeader']" class="student-detail-row"
132
+ [style.height.px]="0"
133
+ ></tr>
134
+
135
+ <ng-container matColumnDef="filaExtraHeader">
136
+ <td mat-cell *matCellDef="let row; let i = dataIndex" [attr.colspan]="visibleColumns.length">
137
+
138
+ <div class="row m-0 student-element-detail"
139
+ [@detailExpand]="(i == 0 && filaExtraHeader.esVisible && filaExtraHeader.esVisible()) ? 'expanded' : 'collapsed'"
140
+ [style.padding-right.px]="row.isExpanded ? 5 : 0"
141
+ [style.padding-left.px]="row.isExpanded ? 5 : 0"
142
+ >
143
+ <ng-container *ngIf="filaExtraHeader.template"
144
+ [ngTemplateOutlet]="filaExtraHeader.template"
145
+ [ngTemplateOutletContext]="{ row: row }"></ng-container>
146
+ </div>
147
+
148
+ </td>
149
+ </ng-container>
150
+ </ng-container>
151
+ <ng-container *ngIf="filaFooter">
152
+ <tr *matFooterRowDef="visibleColumns" mat-footer-row
153
+ [style.height.px]="0"
154
+ [id]="nombreColeccion + '_filaFooter'"
155
+ ></tr>
156
+ </ng-container>
157
+
158
+ <!-- <tr
159
+ *matRowDef="let row; columns: visibleColumns;"
160
+ class="hover:bg-secondary trans-ease-out cursor-pointer"
161
+ mat-row></tr>-->
162
+ <tr
163
+ [matRowKeyboardSelection]="tablaMantenimiento"
164
+ [rowModel]="row"
165
+ (seleccionarSiguiente)="opcMenu($event, {seccion: nombreColeccion, tipo: 'ver'});"
166
+
167
+ *matRowDef="let row; let idxTabla = dataIndex; columns: visibleColumns;"
168
+ (click)="seleccionarItem(row); opcMenu(row, {seccion: nombreColeccion, tipo: 'ver', tableDataIndex: idxTabla });"
169
+ (dblclick)="opcMenu(row, {seccion: nombreColeccion, tipo: 'seleccionar'}); dblclickItem.emit(row)"
170
+ (contextmenu)="(abrirMenuContextual($event, row)); $event. preventDefault();"
171
+ [ngClass]="classFila(row)"
172
+ @fadeInUp
173
+ class="trans-ease-out cursor-pointer h-auto"
174
+ [style.height.px]="0"
175
+ [id]="propiedadSeleccion(row)"
176
+ [matTooltip]="procesarRowTooltip(row)"
177
+ matTooltipPosition="below"
178
+ [matTooltipPositionAtOrigin]="true"
179
+ [matTooltipClass]="['bg-red-700', 'text-red-100', 'm-0']"
180
+ [matTooltipDisabled]="!procesarRowTooltip(row)"
181
+ [class.regAnulado]="row[campoAnulado] == 1"
182
+ [class.regTooltip]="!!procesarRowTooltip(row)"
183
+ (keyup.delete)="opcMenu(row, {seccion: nombreColeccion, tipo: 'eliminar'})"
184
+ mat-row></tr>
185
+ <ng-container *ngIf="filaExtraTemplate">
186
+ <tr mat-row *matRowDef="let row; columns: ['expandedDetail']" class="student-detail-row h-0"></tr>
187
+
188
+ <ng-container matColumnDef="expandedDetail">
189
+ <td mat-cell *matCellDef="let row" [attr.colspan]="visibleColumns.length">
190
+
191
+ <div class="row m-0 student-element-detail"
192
+ [@detailExpand]="row.isExpanded ? 'expanded' : 'collapsed'"
193
+ [style.padding-right.px]="row.isExpanded ? 5 : 0"
194
+ [style.padding-left.px]="row.isExpanded ? 5 : 0"
195
+ >
196
+ <ng-container [ngTemplateOutlet]="filaExtraTemplate"
197
+ [ngTemplateOutletContext]="{ row: row }"></ng-container>
198
+ </div>
199
+
200
+ </td>
201
+ </ng-container>
202
+ </ng-container>
203
+ </table>
204
+
205
+ <ng-container *ngIf="componenteCargadoTotalmente">
206
+ <div *ngIf="(noData | async) && esTabla" class="flex-1 text-center text-secondary font-medium">
207
+ No se encontraron datos
208
+ </div>
209
+ </ng-container>
210
+ </div>
211
+ <ng-content select="[appendTable]"></ng-content>
212
+ <div class="flex-1 bg-app-bar flex flex-col sm:flex-row items-start justify-between p-1">
213
+ <div class="flex-1 flex items-start flex-wrap gap-1">
214
+ <div *ngIf="(botonesMenuFinal.inferior ?? []).length > 0" class=" flex items-center flex-wrap">
215
+ <ng-container *ngFor="let btn of botonesMenu.inferior; let idx = index;">
216
+ <ng-container *ngTemplateOutlet="botonesSuperiores; context:{btn: btn, idx: {inicio: idx, fin: botonesMenu.inferior?.length}}"></ng-container>
217
+ </ng-container>
218
+ </div>
219
+ </div>
220
+
221
+ <div *ngIf="esTabla && paginador" class="flex-1 sm:flex-none flex items-center justify-end">
222
+ <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>
223
+ </div>
224
+ </div>
225
+ </div>
226
+
227
+ </div>
228
+
229
+
230
+
231
+ <!-- SECCION DE TEMPLATES O MENUS -->
232
+
233
+
234
+ <mat-menu #columnFilterMenu="matMenu" xPosition="before" yPosition="below">
235
+ <ng-container *ngFor="let column of columnasTabla">
236
+ <button (click)="toggleColumnVisibility(column, $event)" *ngIf="!tipoValorFuncion(column.noMostrarEnLista, false)"
237
+ class="checkbox-item mat-menu-item">
238
+ <mat-checkbox (click)="$event.stopPropagation()" [(ngModel)]="column.visible" [ngModelOptions]="{standalone: true}" color="primary">
239
+ <span [innerHTML]="(column.labelLista ?? column.label).replace('<br>', ' ')"></span>
240
+ </mat-checkbox>
241
+ </button>
242
+ </ng-container>
243
+ </mat-menu>
244
+
245
+
246
+
247
+
248
+
249
+
250
+ <ng-template #botonesSuperiores let-btn="btn" let-idx="idx">
251
+ <ng-container *ngTemplateOutlet="botonesContextual; context:{btn: btn, item: objSeleccionado, barraSuperior: true, idx: idx}"></ng-container>
252
+ </ng-template>
253
+
254
+ <ng-template #botonesContextual let-btn="btn" let-item="item" let-barraSuperior="barraSuperior" let-idx="idx">
255
+
256
+ <ng-container *ngIf="barraSuperior; else noBarraSuperior">
257
+
258
+ <!-- <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">-->
259
+ <!-- <mat-icon *ngIf="btn.icono" [svgIcon]="btn.icono" size="15px" class="icon-xs"></mat-icon>-->
260
+ <!-- </button>-->
261
+ <ng-container *ngIf="btn.subItems && btn.subItems.length > 0">
262
+ <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"
263
+
264
+ *ngIf="(!btn.esVisible || btn.esVisible(item, this)) && subItemsActivos(btn, item)"
265
+ [class]="(btn.class?btn.class:'')"
266
+
267
+ (click)="opcMenu(item, btn)"
268
+ [style.min-width]="((btn.soloIcono ?? tipoValorFuncion(soloIconos)) ? 'unset' : '')"
269
+ [matTooltip]="btn.tooltip || (btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo))) "
270
+ [matMenuTriggerFor]="menuOtrosBarra.menu"
271
+
272
+ [matBadge]="btn.badge"
273
+ matBadgeSize="small"
274
+ >
275
+ <mat-icon class="icon-xs" [class.mr-0.5]="!(btn.soloIcono ?? tipoValorFuncion(soloIconos))" *ngIf="btn.icono" [svgIcon]="btn.icono" ></mat-icon>
276
+ <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>
277
+ <mat-icon class="icon-xs" svgIcon="fa5sCaretDown" ></mat-icon>
278
+ </button>
279
+
280
+ <jvs-tabla-mantenimiento-menu #menuOtrosBarra
281
+ [objThis]="objThis"
282
+ [nombreColeccion]="nombreColeccion"
283
+ [item]="item"
284
+ [derechosActuales]="derechosActuales"
285
+ [subItems]="btn.subItems"
286
+ (opcionSelecionada)="opcMenu($event.item, $event.btn)"
287
+ [botonTemplate]="botonesContextual"
288
+ >
289
+ </jvs-tabla-mantenimiento-menu>
290
+ </ng-container>
291
+ <ng-container *ngIf="!btn.subItems || btn.subItems.length == 0">
292
+ <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"
293
+
294
+ *ngIf="!btn.esVisible || btn.esVisible(item, this)"
295
+ [class]="(btn.class?btn.class:'text-secondary')"
296
+ [ngClass]="{'text-secondary italic': !ignorarDerechos && !btn.esIndependiente && (!btn.ignorarDerecho && (!derechosActuales || !derechosActuales[btn.cDerechoCodigo ?? btn.tipo])) && !(['nuevo', 'editar', 'eliminar'].includes(btn.tipo))}"
297
+ [disabled]="!btn.esIndependiente && botonDisabled(btn, item)"
298
+ (click)="opcMenu(item, btn)"
299
+ [style.min-width]="((btn.soloIcono ?? tipoValorFuncion(soloIconos)) ? 'unset' : '')"
300
+ [matTooltip]="btn.tooltip || (btn.label ? btn.label : ( (derechosActuales && derechosActuales[btn.cDerechoCodigo ?? btn.tipo]) ? derechosActuales[btn.cDerechoCodigo ?? btn.tipo]['cDerechoNombre'] : capitalizarTexto(btn.tipo))) "
301
+
302
+ [matBadge]="btn.badge"
303
+ matBadgeSize="small"
304
+ >
305
+ <mat-icon class="icon-xs" [class.mr-0.5]="!(btn.soloIcono ?? tipoValorFuncion(soloIconos))" *ngIf="btn.icono" [svgIcon]="btn.icono"></mat-icon>
306
+ <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>
307
+ </button>
308
+
309
+ </ng-container>
310
+
311
+ </ng-container>
312
+ <ng-template #noBarraSuperior>
313
+
314
+ <ng-container *ngIf="btn.subItems && btn.subItems.length > 0">
315
+ <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"
316
+ *ngIf="!btn.noContextual && (!btn.esVisible || btn.esVisible(item, this))"
317
+ [class]="(btn.class?btn.class.replace('text-white', '').replace('bg', 'text'):'text-secondary')"
318
+ [ngClass]="{'text-secondary italic': !ignorarDerechos && !btn.esIndependiente && (!btn.ignorarDerecho && (!derechosActuales || !derechosActuales[btn.cDerechoCodigo ?? btn.tipo]))}"
319
+ [disabled]="!btn.esIndependiente && botonDisabled(btn, item)"
320
+ (click)="opcMenu(item, btn); $event.stopPropagation();"
321
+ [matMenuTriggerFor]="menuOtrosBarra.menu"
322
+ >
323
+ <div class="flex w-full items-center justify-between uppercase text-2xs"
324
+ >
325
+ <mat-icon *ngIf="btn.icono" [svgIcon]="btn.icono"
326
+ class="flex-none icon-xs"
327
+ ></mat-icon>
328
+ <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>
329
+ <mat-icon class="flex-none icon-xs" svgIcon="fa5sCaretRight"></mat-icon>
330
+ </div>
331
+ </button>
332
+
333
+ <jvs-tabla-mantenimiento-menu #menuOtrosBarra
334
+ [objThis]="objThis"
335
+ [nombreColeccion]="nombreColeccion"
336
+ [item]="item"
337
+ [derechosActuales]="derechosActuales"
338
+ [subItems]="btn.subItems"
339
+ (opcionSelecionada)="opcMenu($event.item, $event.btn)"
340
+ [botonTemplate]="botonesContextual"
341
+ >
342
+ </jvs-tabla-mantenimiento-menu>
343
+ </ng-container>
344
+ <ng-container *ngIf="!btn.subItems || btn.subItems.length == 0">
345
+ <ng-container *ngIf="btn.tipo == '-#SEPARADOR#-'; else itemsNormales">
346
+ <mat-divider></mat-divider>
347
+ </ng-container>
348
+ <ng-template #itemsNormales>
349
+ <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"
350
+ *ngIf="!btn.noContextual && (!btn.esVisible || btn.esVisible(item, this))"
351
+ [class]="(btn.class?btn.class.replace('text-white', '').replace('bg', 'text'):'text-secondary')"
352
+ [ngClass]="{'text-secondary italic': !ignorarDerechos && !btn.esIndependiente && (!btn.ignorarDerecho && (!derechosActuales || !derechosActuales[btn.cDerechoCodigo ?? btn.tipo]))}"
353
+ [disabled]="!btn.esIndependiente && botonDisabled(btn, item)"
354
+ (click)="opcMenu(item, btn)"
355
+ >
356
+ <div class="flex w-full items-center justify-between uppercase text-2xs">
357
+ <mat-icon *ngIf="btn.icono" [svgIcon]="btn.icono" class="flex-none icon-xs"
358
+ ></mat-icon>
359
+ <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>
360
+ </div>
361
+ </button>
362
+ </ng-template>
363
+
364
+ </ng-container>
365
+
366
+ </ng-template>
367
+
368
+ </ng-template>
369
+
370
+ <ng-template #userMenu let-item="item">
371
+ <div class="mat-menu bg-white rounded mat-elevation-z8 shadow botonesContextual">
372
+ <ng-container *ngFor="let btn of listaMenuCompleto">
373
+ <ng-container *ngTemplateOutlet="botonesContextual; context:{btn: btn, item: objSeleccionado, barraSuperior: false}"></ng-container>
374
+ </ng-container>
375
+ </div>
376
+ </ng-template>
377
+
378
+
379
+ <mat-menu #menuOpciones="matMenu" xPosition="before" yPosition="below">
380
+ <ng-container *ngFor="let btn of listaMenuCompleto">
381
+ <ng-container
382
+ *ngTemplateOutlet="botonesContextual; context:{btn: btn, item: objSeleccionado, barraSuperior: false}"></ng-container>
383
+ </ng-container>
384
+ </mat-menu>
385
+