utn-cli 2.1.44 → 2.1.46

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 (36) hide show
  1. package/package.json +1 -1
  2. package/templates/backend/servicios/Nucleo/Miscelaneas.js +1 -1
  3. package/templates/frontend/src/app/Componentes/Nucleo/calendario-publico/calendario-publico.component.css +44 -4
  4. package/templates/frontend/src/app/Componentes/Nucleo/calendario-publico/calendario-publico.component.html +10 -8
  5. package/templates/frontend/src/app/Componentes/Nucleo/calendario-publico/calendario-publico.component.ts +2 -2
  6. package/templates/frontend/src/app/Componentes/Nucleo/estadisticas-del-modulo/estadisticas-del-modulo.component.css +49 -2
  7. package/templates/frontend/src/app/Componentes/Nucleo/estadisticas-del-modulo/estadisticas-del-modulo.component.html +9 -2
  8. package/templates/frontend/src/app/Componentes/Nucleo/estadisticas-del-modulo/estadisticas-del-modulo.component.ts +2 -2
  9. package/templates/frontend/src/app/Componentes/Nucleo/gestion-actividad/gestion-actividad.component.css +10 -2
  10. package/templates/frontend/src/app/Componentes/Nucleo/manual/manual.component.css +76 -7
  11. package/templates/frontend/src/app/Componentes/Nucleo/manual/manual.component.html +25 -7
  12. package/templates/frontend/src/app/Componentes/Nucleo/manual/manual.component.ts +93 -16
  13. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-confirmacion/mensaje-confirmacion.component.css +71 -3
  14. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-confirmacion/mensaje-confirmacion.component.html +11 -8
  15. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-confirmacion/mensaje-confirmacion.ts +3 -3
  16. package/templates/frontend/src/app/Componentes/Nucleo/mensajes/mensajes.component.css +67 -0
  17. package/templates/frontend/src/app/Componentes/Nucleo/mensajes/mensajes.component.html +21 -9
  18. package/templates/frontend/src/app/Componentes/Nucleo/mensajes/mensajes.component.ts +1 -2
  19. package/templates/frontend/src/app/Componentes/Nucleo/panel-notificaciones/panel-notificaciones.component.css +209 -0
  20. package/templates/frontend/src/app/Componentes/Nucleo/panel-notificaciones/panel-notificaciones.component.html +45 -0
  21. package/templates/frontend/src/app/Componentes/Nucleo/panel-notificaciones/panel-notificaciones.component.ts +53 -0
  22. package/templates/frontend/src/app/Componentes/Nucleo/reporte-de-incidencias/reporte-de-incidencias.component.css +106 -13
  23. package/templates/frontend/src/app/Componentes/Nucleo/reporte-de-incidencias/reporte-de-incidencias.component.html +43 -32
  24. package/templates/frontend/src/app/Componentes/Nucleo/reporte-de-incidencias/reporte-de-incidencias.component.ts +4 -3
  25. package/templates/frontend/src/app/Componentes/Nucleo/reporte-de-sugerencias/reporte-de-sugerencias.component.css +76 -21
  26. package/templates/frontend/src/app/Componentes/Nucleo/reporte-de-sugerencias/reporte-de-sugerencias.component.html +23 -14
  27. package/templates/frontend/src/app/Componentes/Nucleo/reporte-de-sugerencias/reporte-de-sugerencias.component.ts +4 -3
  28. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.css +20 -10
  29. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.html +17 -8
  30. package/templates/frontend/src/app/Paginas/Nucleo/accesibilidad/accesibilidad.component.css +20 -1
  31. package/templates/frontend/src/app/Paginas/Nucleo/contenedor-componentes/contenedor-componentes.component.css +143 -48
  32. package/templates/frontend/src/app/Paginas/Nucleo/contenedor-componentes/contenedor-componentes.component.html +60 -38
  33. package/templates/frontend/src/app/Paginas/Nucleo/contenedor-componentes/contenedor-componentes.component.ts +28 -6
  34. package/templates/frontend/src/app/Paginas/Nucleo/declaracion-ia/declaracion-ia.component.css +4 -4
  35. package/templates/frontend/src/index.html +7 -0
  36. package/templates/frontend/src/styles.css +14 -1
@@ -6,6 +6,7 @@
6
6
  align-items: center;
7
7
  justify-content: space-between;
8
8
  gap: 16px;
9
+ padding-bottom: 12px;
9
10
  }
10
11
 
11
12
  .cabecera2-info {
@@ -24,6 +25,17 @@
24
25
  .cabecera2 .titulo2 {
25
26
  font-size: large;
26
27
  font-weight: 600;
28
+ display: flex;
29
+ align-items: center;
30
+ gap: 6px;
31
+ }
32
+
33
+ .titulo2-icono {
34
+ font-size: 1.6rem !important;
35
+ width: 1.6rem !important;
36
+ height: 1.6rem !important;
37
+ color: #002f6b;
38
+ flex-shrink: 0;
27
39
  }
28
40
 
29
41
  .cabecera2 .descripcion2 {
@@ -34,11 +46,11 @@
34
46
  .filtro-tarjetas {
35
47
  display: flex;
36
48
  align-items: center;
37
- gap: 4px;
49
+ gap: 6px;
38
50
  background: #f0f4f8;
39
51
  border: 1px solid #c4d0de;
40
- border-radius: 8px;
41
- padding: 4px 8px;
52
+ border-radius: 4px;
53
+ padding: 8px 12px;
42
54
  flex-shrink: 0;
43
55
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
44
56
  }
@@ -49,9 +61,9 @@
49
61
  }
50
62
 
51
63
  .filtro-icono {
52
- font-size: 18px !important;
53
- width: 18px !important;
54
- height: 18px !important;
64
+ font-size: 20px !important;
65
+ width: 20px !important;
66
+ height: 20px !important;
55
67
  color: #6b7c8f;
56
68
  flex-shrink: 0;
57
69
  }
@@ -60,10 +72,10 @@
60
72
  border: none;
61
73
  background: transparent;
62
74
  outline: none;
63
- font-size: 14px;
75
+ font-size: 15px;
64
76
  font-family: 'Roboto', sans-serif;
65
77
  color: #333;
66
- width: 180px;
78
+ width: 320px;
67
79
  }
68
80
 
69
81
  .filtro-input::placeholder {
@@ -125,10 +137,15 @@
125
137
  color: #0b4fce;
126
138
  }
127
139
 
140
+ .ColorBlanco:hover {
141
+ background-color: rgba(255, 255, 255, 0.15);
142
+ color: white;
143
+ }
144
+
128
145
  /* Contenedor */
129
146
  .contenedor {
130
147
  flex-grow: 1;
131
- padding: 0 15px;
148
+ padding: 16px 15px 0;
132
149
  display: flex;
133
150
  flex-direction: column;
134
151
  background-color: aliceblue;
@@ -148,40 +165,97 @@
148
165
 
149
166
  /* Contenido */
150
167
  .contenido {
151
- border: 3px solid #0b4fce;
152
168
  border-radius: 15px;
153
169
  padding: 20px;
154
- box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
155
170
  background-color: white;
156
171
  text-align: center;
157
172
  }
158
173
 
159
- /* Titulos */
160
- .titulo,
174
+ /* Header unificado */
161
175
  .encabezado {
162
- font-weight: bold;
163
- text-align: center;
164
- padding: 0.5rem;
165
- position: relative;
176
+ display: flex;
177
+ justify-content: space-between;
178
+ align-items: center;
179
+ padding: 0 16px;
180
+ height: 52px;
181
+ background: linear-gradient(90deg, rgba(1, 33, 105, 1) 0%, rgba(63, 97, 171, 1) 100%);
182
+ color: white;
183
+ flex-shrink: 0;
184
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25);
166
185
  }
167
186
 
168
- .titulo {
169
- font-size: 18px;
170
- background-color: #002f6b;
171
- color: white;
187
+ .encabezado-marca {
172
188
  display: flex;
189
+ align-items: center;
190
+ gap: 10px;
191
+ min-width: 0;
192
+ overflow: hidden;
173
193
  }
174
194
 
175
- .encabezado {
176
- font-size: 25px;
177
- background-color: #adbccf;
178
- color: #002f6b;
195
+ .encabezado-logo {
196
+ height: 28px;
197
+ width: auto;
198
+ flex-shrink: 0;
199
+ filter: brightness(0) invert(1);
200
+ }
201
+
202
+ .encabezado-nombre-uni {
203
+ font-size: 16px;
204
+ font-weight: 700;
205
+ white-space: nowrap;
206
+ letter-spacing: 0.2px;
207
+ }
208
+
209
+ .encabezado-nombre-corto {
210
+ display: none;
211
+ }
212
+
213
+ .encabezado-separador {
214
+ color: rgba(255, 255, 255, 0.35);
215
+ font-weight: 200;
216
+ font-size: 20px;
217
+ line-height: 1;
218
+ }
219
+
220
+ .encabezado-titulo-modulo {
221
+ font-size: 14px;
222
+ font-weight: 700;
223
+ color: rgba(255, 255, 255, 0.8);
224
+ white-space: nowrap;
225
+ overflow: hidden;
226
+ text-overflow: ellipsis;
227
+ }
228
+
229
+ .encabezado-acciones {
179
230
  display: flex;
231
+ align-items: center;
232
+ gap: 2px;
233
+ flex-shrink: 0;
234
+ }
235
+
236
+ .encabezado-divisor-vertical {
237
+ width: 1px;
238
+ height: 20px;
239
+ background-color: rgba(255, 255, 255, 0.25);
240
+ margin: 0 6px;
180
241
  }
181
242
 
182
243
  @media (max-width: 768px) {
183
244
  .encabezado {
184
245
  font-size: 18px;
246
+ padding: 0 8px;
247
+ }
248
+
249
+ .encabezado-logo {
250
+ height: 22px;
251
+ }
252
+
253
+ .encabezado-marca {
254
+ gap: 6px;
255
+ }
256
+
257
+ .encabezado-acciones {
258
+ gap: 0;
185
259
  }
186
260
 
187
261
  .cabecera2 {
@@ -219,6 +293,14 @@
219
293
  font-size: 18px;
220
294
  }
221
295
 
296
+ .encabezado-nombre-completo {
297
+ display: none;
298
+ }
299
+
300
+ .encabezado-titulo-modulo {
301
+ font-size: 11px;
302
+ }
303
+
222
304
  .pie-col.izquierda {
223
305
  display: none;
224
306
  }
@@ -238,10 +320,11 @@
238
320
  display: flex;
239
321
  justify-content: space-between;
240
322
  align-items: center;
241
- padding: 0.5rem;
242
- background-color: #adbccf;
243
- color: #000;
244
- font-size: 15px;
323
+ padding: 3px 12px;
324
+ background-color: #f4f6f9;
325
+ border-top: 1px solid #dde3ec;
326
+ color: #6b7c8f;
327
+ font-size: 11px;
245
328
  flex-shrink: 0;
246
329
  }
247
330
 
@@ -286,29 +369,25 @@
286
369
  .contador-usuarios {
287
370
  display: flex;
288
371
  align-items: center;
289
- background: rgba(255, 255, 255, 0.5);
290
- padding: 4px 15px;
291
- border-radius: 20px;
372
+ background: transparent;
373
+ padding: 2px 10px;
374
+ border-radius: 12px;
292
375
  font-family: 'Roboto', sans-serif;
293
- font-size: 14px;
294
- color: #002f6b;
295
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
296
- border: 1px solid rgba(0, 47, 107, 0.1);
376
+ font-size: 11px;
377
+ color: #6b7c8f;
297
378
  transition: all 0.3s ease;
298
379
  }
299
380
 
300
381
  .contador-usuarios:hover {
301
- background: rgba(255, 255, 255, 0.8);
302
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
303
- transform: translateY(-1px);
382
+ background: rgba(0, 47, 107, 0.05);
304
383
  }
305
384
 
306
385
  .icono-usuarios {
307
- font-size: 18px !important;
308
- width: 18px !important;
309
- height: 18px !important;
310
- margin-right: 8px;
311
- color: #1976d2;
386
+ font-size: 14px !important;
387
+ width: 14px !important;
388
+ height: 14px !important;
389
+ margin-right: 5px;
390
+ color: #8fa0b4;
312
391
  }
313
392
 
314
393
  .etiqueta-usuarios {
@@ -318,11 +397,28 @@
318
397
  }
319
398
 
320
399
  .separador-usuarios {
321
- margin: 0 10px;
400
+ margin: 0 8px;
322
401
  color: #ccc;
323
402
  font-weight: 200;
324
403
  }
325
404
 
405
+ .pie .botonDeNavegacion {
406
+ color: #8fa0b4;
407
+ padding: 2px;
408
+ }
409
+
410
+ .pie .botonDeNavegacion mat-icon {
411
+ font-size: 18px !important;
412
+ width: 18px !important;
413
+ height: 18px !important;
414
+ }
415
+
416
+ .pie .botonDeNavegacion:hover {
417
+ background-color: rgba(0, 47, 107, 0.08);
418
+ color: #002f6b;
419
+ transform: scale(1.1);
420
+ }
421
+
326
422
  .valor-fijo {
327
423
  font-weight: bold;
328
424
  color: #002f6b;
@@ -343,11 +439,10 @@
343
439
 
344
440
  .numero-animado {
345
441
  display: block;
346
- font-weight: bold;
347
- color: #002f6b;
442
+ font-weight: 600;
443
+ color: #4a5e73;
348
444
  width: 100%;
349
445
  text-align: center;
350
- /* Animación tipo YouTube: deslizamiento estrictamente vertical */
351
446
  animation: youtubeSlide 0.6s cubic-bezier(0.23, 1, 0.32, 1) forwards;
352
447
  will-change: transform, opacity;
353
448
  }
@@ -1,39 +1,24 @@
1
1
  <div class="pagina">
2
2
  <div class="encabezado">
3
- <div class="pie-col izquierda">
4
- </div>
5
- <div class="pie-col centro">
6
- Universidad Técnica Nacional
7
- </div>
8
- <div class="pie-col derecha">
9
- @if(TienePermiso) {
10
- <button class="botonDeNavegacion" [matTooltip]="NombreUsuario || 'Perfil'" [title]="NombreUsuario || 'Perfil'"
11
- (click)="irAPerfil()">
12
- <mat-icon>person</mat-icon>
13
- </button>
14
- <button class="botonDeNavegacion" matTooltip="Mensajes" title="Mensajes" (click)="irAMensajes()">
15
- @if (Mensajes.length > 0) {
16
- <mat-icon>mark_email_unread</mat-icon>
17
- } @else {
18
- <mat-icon>email_unread</mat-icon>
19
- }
20
- </button>
21
- <button class="botonDeNavegacion" matTooltip="Salir" title="Salir" (click)="Salir()">
22
- <mat-icon>logout</mat-icon>
3
+ <div class="encabezado-marca">
4
+ @if(TienePermiso && esDashboard){
5
+ <button class="botonDeNavegacion ColorBlanco" matTooltip="Módulos" title="Módulos" (click)="toggleSidebar()">
6
+ <mat-icon>menu</mat-icon>
23
7
  </button>
24
- } @else {
25
- <button class="botonDeNavegacion" matTooltip="Entrar" title="Entrar" (click)="Entrar()">
26
- <mat-icon>login</mat-icon>
8
+ } @else if (TienePermiso) {
9
+ <button class="botonDeNavegacion ColorBlanco" matTooltip="Menú principal" title="Menú principal" (click)="irAlInicio()">
10
+ <mat-icon>home</mat-icon>
27
11
  </button>
28
12
  }
13
+ <span class="encabezado-divisor-vertical"></span>
14
+ <img class="encabezado-logo" src="https://storage.sigu.utn.ac.cr/images/cards/LogoUTN.svg" alt="Logo UTN" />
15
+ <span class="encabezado-nombre-uni encabezado-nombre-completo">Universidad Técnica Nacional</span>
16
+ <span class="encabezado-nombre-uni encabezado-nombre-corto">UTN</span>
17
+ <span class="encabezado-separador">|</span>
18
+ <span class="encabezado-titulo-modulo">SIGU</span>
29
19
  </div>
30
- </div>
31
-
32
- @if(TienePermiso){
33
- <div class="titulo">
34
- <div class="pie-col izquierda"></div>
35
- <div class="pie-col centro">{{ Titulo }}</div>
36
- <div class="pie-col derecha">
20
+ <div class="encabezado-acciones">
21
+ @if(TienePermiso){
37
22
  <button class="botonDeNavegacion ColorBlanco" matTooltip="Ir atrás" title="Ir atrás" (click)="irAtras()">
38
23
  <mat-icon>arrow_back</mat-icon>
39
24
  </button>
@@ -41,16 +26,40 @@
41
26
  (click)="irAlMenuDeModulo()">
42
27
  <mat-icon>menu</mat-icon>
43
28
  </button>
44
- <!-- <button class="botonDeNavegacion" matTooltip="Ir al móudulo padre" title="Ir al móudulo padre" (click)="irAlModuloPadre()">
45
- <mat-icon>apps</mat-icon>
46
- </button> -->
47
29
  <button class="botonDeNavegacion ColorBlanco" matTooltip="Ir al inicio" title="Ir al inicio"
48
30
  (click)="irAlInicio()">
49
31
  <mat-icon>home</mat-icon>
50
32
  </button>
33
+ <span class="encabezado-divisor-vertical"></span>
34
+ <button class="botonDeNavegacion ColorBlanco" matTooltip="Mensajes" title="Mensajes" (click)="irAMensajes()">
35
+ @if (Mensajes.length > 0) {
36
+ <mat-icon>mark_email_unread</mat-icon>
37
+ } @else {
38
+ <mat-icon>email_unread</mat-icon>
39
+ }
40
+ </button>
41
+ <button class="botonDeNavegacion ColorBlanco" [matTooltip]="NombreUsuario || 'Perfil'"
42
+ [title]="NombreUsuario || 'Perfil'" [matMenuTriggerFor]="menuUsuario">
43
+ <mat-icon>person</mat-icon>
44
+ </button>
45
+ <mat-menu #menuUsuario="matMenu">
46
+ <button mat-menu-item (click)="irAPerfil()" title="Ver perfil">
47
+ <mat-icon>manage_accounts</mat-icon>
48
+ <span>{{ NombreUsuario || 'Perfil' }}</span>
49
+ </button>
50
+ <mat-divider></mat-divider>
51
+ <button mat-menu-item (click)="Salir()" title="Cerrar sesión">
52
+ <mat-icon>logout</mat-icon>
53
+ <span>Cerrar sesión</span>
54
+ </button>
55
+ </mat-menu>
56
+ } @else {
57
+ <button class="botonDeNavegacion ColorBlanco" matTooltip="Entrar" title="Entrar" (click)="Entrar()">
58
+ <mat-icon>login</mat-icon>
59
+ </button>
60
+ }
51
61
  </div>
52
62
  </div>
53
- }
54
63
  <div class="zona-scrollable">
55
64
  <div [ngClass]="claseDelContenedor">
56
65
  <!-- @if(TienePermiso) {
@@ -72,17 +81,23 @@
72
81
  } -->
73
82
  <div class="contenido">
74
83
  @if(TienePermiso){
75
- @if(!esDashboard || tieneTarjetas) {
84
+ @if(esDashboard && tieneTarjetas) {
76
85
  <div class="cabecera2">
77
86
  <div class="cabecera2-info">
78
- <p class="titulo2">{{ Descripcion }}</p>
87
+ <p class="titulo2">
88
+ @if (esDashboard) {
89
+ <mat-icon class="titulo2-icono" aria-hidden="true">home</mat-icon>
90
+ }
91
+ {{ Descripcion }}
92
+ </p>
79
93
  <p class="descripcion2">{{ Detalle }}</p>
80
94
  </div>
81
95
  @if (esDashboard) {
82
96
  <div class="filtro-tarjetas">
83
97
  <mat-icon class="filtro-icono">search</mat-icon>
84
98
  <input #filtroInput class="filtro-input" type="text" placeholder="Buscar tarjeta..." [value]="filtro"
85
- (input)="onFiltroChange($event)" aria-label="Buscar tarjeta por nombre" />
99
+ (input)="onFiltroChange($event)" aria-label="Buscar tarjeta por nombre"
100
+ (keydown.tab)="enfocarPrimeraTarjeta($event)" />
86
101
  @if (filtro) {
87
102
  <button class="filtro-limpiar" (click)="limpiarFiltro()" title="Limpiar búsqueda"
88
103
  aria-label="Limpiar búsqueda">
@@ -101,6 +116,13 @@
101
116
  </div>
102
117
  </div>
103
118
 
119
+ @if (panelNotificacionesAbierto) {
120
+ <app-panel-notificaciones
121
+ [datos]="datosNotificaciones"
122
+ (cerrar)="panelNotificacionesAbierto = false">
123
+ </app-panel-notificaciones>
124
+ }
125
+
104
126
  <div class="pie">
105
127
  <div class="pie-col izquierda">
106
128
  Módulo: {{ Modulo }}. Versión: {{ Version }}.
@@ -151,7 +173,7 @@
151
173
  <button class="botonDeNavegacion" matTooltip="Ayuda" title="Ayuda" (click)="irAAyuda()">
152
174
  <mat-icon>help</mat-icon>
153
175
  </button>
154
- <button class="botonDeNavegacion" matTooltip="Calensario institucional" title="Calendario institucional"
176
+ <button class="botonDeNavegacion" matTooltip="Calendario institucional" title="Calendario institucional"
155
177
  (click)="irACalendario()">
156
178
  <mat-icon>calendar_view_week</mat-icon>
157
179
  </button>
@@ -8,6 +8,7 @@ import { MatTooltipModule } from '@angular/material/tooltip';
8
8
  import { MatDialog } from '@angular/material/dialog';
9
9
  import { MatDividerModule } from '@angular/material/divider';
10
10
  import type { ItemDeMenuDialog } from '../../../Componentes/Nucleo/reordenar-menu/reordenar-menu.component';
11
+ import { PanelNotificacionesComponent } from '../../../Componentes/Nucleo/panel-notificaciones/panel-notificaciones.component';
11
12
 
12
13
  import { MatMenuModule } from '@angular/material/menu';
13
14
 
@@ -22,7 +23,7 @@ interface ItemDeMenu {
22
23
 
23
24
  @Component({
24
25
  selector: 'app-contenedor-componentes',
25
- imports: [RouterOutlet, MatIconModule, MatTooltipModule, CommonModule, MatMenuModule, MatDividerModule],
26
+ imports: [RouterOutlet, MatIconModule, MatTooltipModule, CommonModule, MatMenuModule, MatDividerModule, PanelNotificacionesComponent],
26
27
  templateUrl: './contenedor-componentes.component.html',
27
28
  styleUrl: './contenedor-componentes.component.css'
28
29
  })
@@ -35,6 +36,8 @@ export class ContenedorComponentesComponent implements OnInit, OnDestroy, AfterV
35
36
  public Modulo: string = '';
36
37
  public Version: string = '';
37
38
  public Mensajes: string[] = [];
39
+ public panelNotificacionesAbierto: boolean = false;
40
+ public datosNotificaciones: any[] = [];
38
41
  public EnlaceDelManual: string = '-';
39
42
  public EnlaceDelVideo: string = '-';
40
43
  public claseDelContenedor: string = '';
@@ -54,6 +57,12 @@ export class ContenedorComponentesComponent implements OnInit, OnDestroy, AfterV
54
57
  }
55
58
 
56
59
  get esDashboard(): boolean { return this.router.url === '/'; }
60
+
61
+ toggleSidebar(): void {
62
+ const abriendo = !this.datosGlobalesService.sidebarVisible$.value;
63
+ if (abriendo) this.panelNotificacionesAbierto = false;
64
+ this.datosGlobalesService.sidebarVisible$.next(abriendo);
65
+ }
57
66
  get tieneTarjetas(): boolean { return this.datosGlobalesService.cantidadDeTarjetas$.value > 0; }
58
67
  get filtro(): string { return this.datosGlobalesService.filtroDeTarjetas$.value; }
59
68
 
@@ -70,6 +79,13 @@ export class ContenedorComponentesComponent implements OnInit, OnDestroy, AfterV
70
79
  this.datosGlobalesService.filtroDeTarjetas$.next('');
71
80
  }
72
81
 
82
+ enfocarPrimeraTarjeta(event: Event): void {
83
+ const primera = document.querySelector<HTMLElement>('.modulo-card[role="button"]');
84
+ if (!primera) return;
85
+ event.preventDefault();
86
+ primera.focus();
87
+ }
88
+
73
89
  constructor(private http: HttpClient, private datosGlobalesService: DatosGlobalesService, private location: Location, private dialog: MatDialog, private router: Router, private ngZone: NgZone) {
74
90
  if (datosGlobalesService.ObtenerToken() === '') {
75
91
  datosGlobalesService.RedirigirALogin();
@@ -258,9 +274,15 @@ export class ContenedorComponentesComponent implements OnInit, OnDestroy, AfterV
258
274
  }
259
275
 
260
276
  irAMensajes(): void {
261
- this.http.get(this.datosGlobalesService.ObtenerURL() + 'misc/obtenerNotificaciones').subscribe(async (datos: any) => {
262
- const { MensajesComponent } = await import('../../../Componentes/Nucleo/mensajes/mensajes.component');
263
- this.dialog.open(MensajesComponent, { data: datos.body });
277
+ this.datosGlobalesService.sidebarVisible$.next(false);
278
+ this.http.get(this.datosGlobalesService.ObtenerURL() + 'misc/obtenerNotificaciones').subscribe((datos: any) => {
279
+ this.datosNotificaciones = (datos.body ?? []).map((n: any) => ({
280
+ llave: n.FechaYHoraDeCreacion,
281
+ valor: n.Notificacion,
282
+ tachado: false,
283
+ eliminando: false
284
+ }));
285
+ this.panelNotificacionesAbierto = true;
264
286
  });
265
287
  }
266
288
 
@@ -310,13 +332,13 @@ export class ContenedorComponentesComponent implements OnInit, OnDestroy, AfterV
310
332
 
311
333
  async irASugerencias(): Promise<void> {
312
334
  const { ReporteDeSugerenciasComponent } = await import('../../../Componentes/Nucleo/reporte-de-sugerencias/reporte-de-sugerencias.component');
313
- this.dialog.open(ReporteDeSugerenciasComponent);
335
+ this.dialog.open(ReporteDeSugerenciasComponent, { panelClass: 'dialog-sugerencias' });
314
336
  }
315
337
 
316
338
  irAEstadisticasDelModulo(): void {
317
339
  this.http.get(this.datosGlobalesService.ObtenerURL() + 'misc/obtenerVistas').subscribe(async (datos: any) => {
318
340
  const { EstadisticasDelModuloComponent } = await import('../../../Componentes/Nucleo/estadisticas-del-modulo/estadisticas-del-modulo.component');
319
- this.dialog.open(EstadisticasDelModuloComponent, { data: datos.body });
341
+ this.dialog.open(EstadisticasDelModuloComponent, { data: datos.body, panelClass: 'dialog-estadisticas' });
320
342
  });
321
343
  }
322
344
 
@@ -14,10 +14,10 @@
14
14
  /* Encabezado */
15
15
  .ia-encabezado {
16
16
  display: flex;
17
- align-items: flex-start;
17
+ align-items: center;
18
18
  gap: 14px;
19
19
  padding: 20px 24px;
20
- background: linear-gradient(135deg, #002f6b 0%, #1565c0 100%);
20
+ background: linear-gradient(90deg, rgba(1, 33, 105, 1) 0%, rgba(63, 97, 171, 1) 100%);
21
21
  color: white;
22
22
  border-radius: 12px;
23
23
  }
@@ -27,14 +27,14 @@
27
27
  width: 40px !important;
28
28
  height: 40px !important;
29
29
  flex-shrink: 0;
30
- margin-top: 4px;
31
30
  opacity: 0.9;
32
31
  }
33
32
 
34
33
  .ia-encabezado h1 {
35
- margin: 0 0 6px 0;
34
+ margin: 0;
36
35
  font-size: 22px;
37
36
  font-weight: 700;
37
+ line-height: 1;
38
38
  }
39
39
 
40
40
  .ia-encabezado p {
@@ -20,6 +20,12 @@
20
20
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
21
21
  <script src="https://accounts.google.com/gsi/client" async defer></script>
22
22
  <meta description="Universidad Técnica Nacional - SIGU">
23
+ <style>
24
+ #userwayAccessibilityIcon {
25
+ bottom: 35px !important;
26
+ top: auto !important;
27
+ }
28
+ </style>
23
29
  </head>
24
30
 
25
31
  <body bgcolor="#adbccf">
@@ -29,6 +35,7 @@
29
35
  (function (d) {
30
36
  var s = d.createElement("script");
31
37
  s.setAttribute("data-account", "oDM5lWND5w");
38
+ s.setAttribute("data-position", "3");
32
39
  s.setAttribute("src", "https://cdn.userway.org/widget.js");
33
40
  (d.body || d.head).appendChild(s);
34
41
  })(document);
@@ -8,7 +8,20 @@ body {
8
8
  font-family: Roboto, "Helvetica Neue", sans-serif;
9
9
  }
10
10
 
11
- .cdk-overlay-pane.mat-mdc-dialog-panel{
11
+ .cdk-overlay-pane.mat-mdc-dialog-panel {
12
12
  max-width: 100vw !important;
13
13
  max-height: 200vh !important;
14
14
  }
15
+
16
+ .dialog-sugerencias .mat-mdc-dialog-surface,
17
+ .dialog-mensajes .mat-mdc-dialog-surface,
18
+ .dialog-estadisticas .mat-mdc-dialog-surface {
19
+ overflow: hidden !important;
20
+ }
21
+
22
+ .dialog-sugerencias .mat-mdc-dialog-content,
23
+ .dialog-mensajes .mat-mdc-dialog-content,
24
+ .dialog-estadisticas .mat-mdc-dialog-content {
25
+ max-height: unset !important;
26
+ overflow: visible !important;
27
+ }