utn-cli 2.0.97 → 2.0.98

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "utn-cli",
3
- "version": "2.0.97",
3
+ "version": "2.0.98",
4
4
  "description": "Herramienta CLI unificada para la gestión de plantillas en SIGU.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -825,8 +825,10 @@ class Miscelaneo {
825
825
  `a`.`Version`, `a`.`FechaDePublicacion`, `a`.`AcuerdoDeNivelDeServicio`, `a`.`DiccionarioDeDatos`, `a`.`Repositorios`,\
826
826
  `a`.`EnlaceDelVideo`,`a`.`EnlaceDelManual`\
827
827
  , `a`.`Estado`, REGEXP_SUBSTR(`a`.`Repositorios`, '[^,]*front[^,]*') AS `Frontend`\
828
+ , `c`.`Etiqueta`, `c`.`ColorDeLaEtiqueta`\
828
829
  FROM `SIGU`.`SIGU_ModulosV2` `a`\
829
830
  JOIN `SIGU`.`SIGU_PermisosV2` `b` ON (`a`.`Nombre` = `b`.`Modulo`)\
831
+ LEFT JOIN `SIGU`.`SIGU_ModulosV2InformacionExtra` `c` ON (`a`.`Nombre` = `c`.`Modulo`)\
830
832
  WHERE `a`.`Estado` = 'Activo' AND `a`.`Padre` = ? AND `b`.`PermisoId` IN (?)\
831
833
  ORDER BY FIELD(a.Nombre, " + ModulosFavoritos + ") DESC, a.Nombre", [Padre, Permisos.map(p => p.PermisoId)]);
832
834
  return Modulos.map((linea) => {
@@ -1,93 +1,154 @@
1
- .esquina {
2
- position: absolute;
3
- bottom: 0;
4
- right: 0;
5
- width: 40px;
6
- height: 40px;
7
- background: linear-gradient(135deg, transparent 50%, rgba(0, 0, 0, 0.1) 50%);
8
- pointer-events: none;
9
- z-index: 1;
10
- }
11
-
12
- .pin-icon {
13
- position: absolute;
14
- top: 8px;
15
- right: 8px;
16
- font-size: 24px;
17
- color: #888;
18
- cursor: pointer;
19
- z-index: 2;
20
- transition: color 0.3s;
21
- }
22
-
23
- .pin-icon.pinned {
24
- color: #222;
1
+ :host {
2
+ display: block;
25
3
  }
26
4
 
27
5
  .modulo-card {
28
6
  position: relative;
29
- border: 1px solid #ccc;
30
- border-radius: 8px;
31
- padding: 16px;
32
7
  width: 300px;
33
- height: 150px;
34
- box-sizing: border-box;
35
- transition: all 0.2s ease;
8
+ /* Reduced from 380px */
9
+ height: 220px;
10
+ border-radius: 25px;
11
+ overflow: hidden;
12
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15);
13
+ border: 1px solid #0B4FCE;
14
+ /* Added border as requested */
15
+ cursor: pointer;
16
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
17
+ background-color: #fff;
36
18
  display: flex;
37
19
  flex-direction: column;
38
- justify-content: space-between;
39
20
  margin: 10px;
40
- cursor: pointer;
21
+ /* Reduced to previous value */
41
22
  }
42
23
 
43
24
  .modulo-card:hover {
44
- box-shadow: 0 6px 16px rgba(0, 0, 0, 0.1);
45
- transform: scale(1.01);
25
+ transform: translateY(-5px);
26
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2);
46
27
  }
47
28
 
48
- .modulo-header {
29
+ .modulo-card-header {
30
+ height: 105px;
31
+ /* Increased to reach the bottom of the icon container */
32
+ background-color: #f2f2f2;
49
33
  display: flex;
50
- align-items: center;
51
- gap: 12px;
52
- margin-bottom: 12px;
34
+ justify-content: space-between;
35
+ align-items: flex-start;
36
+ /* Align to top instead of center */
37
+ padding: 15px;
38
+ position: relative;
53
39
  }
54
40
 
55
- .modulo-icon {
56
- width: 48px;
57
- height: 48px;
41
+ .modulo-tipo {
42
+ color: #3e5a7a;
43
+ font-size: 1.2rem;
44
+ font-weight: 500;
45
+ letter-spacing: 1px;
46
+ margin-top: 5px;
47
+ /* Slight adjustment for alignment */
58
48
  }
59
49
 
60
- .modulo-nombre {
61
- margin: 0;
62
- font-size: 1.25rem;
63
- font-weight: bold;
50
+ .pin-container {
51
+ width: 40px;
52
+ height: 40px;
53
+ background-color: #e6e6e6;
54
+ border-radius: 50%;
55
+ display: flex;
56
+ justify-content: center;
57
+ align-items: center;
58
+ color: #888;
59
+ transition: all 0.3s ease;
60
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05);
61
+ }
62
+
63
+ .pin-container.pinned {
64
64
  color: #333;
65
+ background-color: #ddd;
65
66
  }
66
67
 
67
- .modulo-tipo {
68
- font-size: 1.3rem;
69
- font-weight: 500;
68
+ .pin-icon {
69
+ font-size: 24px;
70
+ transform: rotate(30deg);
70
71
  }
71
72
 
72
- .tipo-área {
73
- color: #0077cc;
73
+ .modulo-icon-wrapper {
74
+ position: absolute;
75
+ top: 65px;
76
+ /* Center remains at 65px, so bottom is around 102.5px */
77
+ left: 50%;
78
+ transform: translate(-50%, -50%);
79
+ z-index: 10;
74
80
  }
75
81
 
76
- .tipo-proceso {
77
- color: #2e7d32;
82
+ .modulo-icon-container {
83
+ width: 75px;
84
+ height: 75px;
85
+ background-color: #fff;
86
+ border-radius: 50%;
87
+ display: flex;
88
+ justify-content: center;
89
+ align-items: center;
90
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
91
+ padding: 10px;
78
92
  }
79
93
 
80
- .tipo-servicio {
81
- color: #6a1b9a;
94
+ .modulo-icon {
95
+ width: 100%;
96
+ height: 100%;
97
+ object-fit: contain;
98
+ }
99
+
100
+ .modulo-icon-placeholder {
101
+ width: 40px;
102
+ height: 40px;
103
+ background-color: #eee;
104
+ border-radius: 50%;
105
+ }
106
+
107
+ .modulo-card-body {
108
+ flex-grow: 1;
109
+ display: flex;
110
+ justify-content: center;
111
+ align-items: center;
112
+ padding: 15px 20px;
113
+ /* Reduced top padding as it doesn't need to clear the overlapping icon anymore */
114
+ text-align: center;
115
+ position: relative;
82
116
  }
83
117
 
84
118
  .modulo-descripcion {
85
- font-size: 1.1rem;
86
- color: #555;
87
- margin-bottom: 10px;
119
+ color: #1d3a5f;
120
+ font-size: 1.4rem;
121
+ /* Reduced from 1.6rem */
122
+ font-weight: 700;
123
+ line-height: 1.2;
124
+ margin: 0;
125
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
88
126
  }
89
127
 
90
- .modulo-info {
91
- font-size: 0.85rem;
92
- color: #777;
128
+ .esquina {
129
+ position: absolute;
130
+ bottom: 0;
131
+ right: 0;
132
+ width: 20px;
133
+ height: 20px;
134
+ background: linear-gradient(135deg, transparent 50%, rgba(255, 255, 255, 0.5) 50%);
135
+ pointer-events: none;
93
136
  }
137
+
138
+ .cintillo-etiqueta {
139
+ position: absolute;
140
+ bottom: 20px;
141
+ right: -42px;
142
+ width: 170px;
143
+ /* Wider to accommodate longer text */
144
+ padding: 5px 0;
145
+ text-align: center;
146
+ color: white;
147
+ font-weight: 800;
148
+ font-size: 0.75rem;
149
+ /* Further reduced to ensure 'ACTUALIZADO' fits completely */
150
+ letter-spacing: 0.5px;
151
+ transform: rotate(-45deg);
152
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
153
+ z-index: 5;
154
+ }
@@ -1,21 +1,30 @@
1
- <div class="modulo-card" (click)="onClick()" [ngStyle]="{ 'background-color': modulo.Color }">
2
- <span class="material-icons pin-icon" [ngClass]="{ 'pinned': estaEnFavoritos() }" (click)="alternarFavorito($event)">
3
- push_pin
4
- </span>
5
- <div class="modulo-header">
6
- @if(modulo.Icono) {
7
- <img src="{{ modulo.Icono }}" class="modulo-icon" />
8
- } @else {
9
- <div class="modulo-icon"></div>
10
- }
11
- <div>
12
- <!-- <h2 class="modulo-nombre">{{ modulo.Nombre }}</h2> -->
13
- <span class="modulo-tipo tipo-{{ modulo.Tipo.toLowerCase() }}">{{ modulo.Tipo }}</span>
1
+ <div class="modulo-card" (click)="onClick()">
2
+ <div class="modulo-card-header">
3
+ <span class="modulo-tipo">{{ modulo.Tipo | uppercase }}</span>
4
+ <div class="pin-container" (click)="alternarFavorito($event)" [ngClass]="{ 'pinned': estaEnFavoritos() }">
5
+ <span class="material-icons pin-icon">
6
+ push_pin
7
+ </span>
8
+ </div>
9
+ </div>
10
+
11
+ @if(modulo.Icono) {
12
+ <div class="modulo-icon-wrapper">
13
+ <div class="modulo-icon-container">
14
+ <img src="{{ modulo.Icono }}" class="modulo-icon" alt="{{ modulo.Descripcion }}" />
14
15
  </div>
15
16
  </div>
16
- <p class="modulo-descripcion">{{ modulo.Descripcion }}</p>
17
- <div class="modulo-info"></div>
18
- @if(modulo.Tipo === 'Servicio') {
19
- <div class="esquina"></div>
20
17
  }
18
+
19
+ <div class="modulo-card-body" [ngStyle]="{ 'background-color': modulo.Color }">
20
+ <p class="modulo-descripcion">{{ modulo.Descripcion }}</p>
21
+ @if(modulo.Tipo === 'Servicio') {
22
+ <!-- <div class="esquina"></div> -->
23
+ }
24
+ @if(modulo.Etiqueta) {
25
+ <div class="cintillo-etiqueta" [ngStyle]="{ 'background-color': modulo.ColorDeLaEtiqueta || '#4a90e2' }">
26
+ {{ modulo.Etiqueta | uppercase }}
27
+ </div>
28
+ }
29
+ </div>
21
30
  </div>
@@ -43,6 +43,10 @@
43
43
  border-radius: 50%;
44
44
  }
45
45
 
46
+ .ColorBlanco {
47
+ color: white;
48
+ }
49
+
46
50
  .botonDeNavegacion:hover {
47
51
  background-color: rgba(25, 118, 210, 0.1);
48
52
  transform: scale(1.1);
@@ -93,6 +97,7 @@
93
97
  font-size: 18px;
94
98
  background-color: #002f6b;
95
99
  color: white;
100
+ display: flex;
96
101
  }
97
102
 
98
103
  .encabezado {
@@ -156,6 +161,7 @@
156
161
  }
157
162
 
158
163
  .zona-scrollable {
164
+ margin-top: 3px;
159
165
  flex-grow: 1;
160
166
  overflow-y: auto;
161
167
  display: flex;
@@ -7,41 +7,62 @@
7
7
  </div>
8
8
  <div class="pie-col derecha">
9
9
  @if(TienePermiso) {
10
- <button class="botonDeNavegacion" matTooltip="Salir" (click)="Salir()">
10
+ <button class="botonDeNavegacion" matTooltip="Salir" title="Salir" (click)="Salir()">
11
11
  <mat-icon>logout</mat-icon>
12
12
  </button>
13
- <button class="botonDeNavegacion" [matTooltip]="NombreUsuario || 'Perfil'" (click)="irAPerfil()">
13
+ <button class="botonDeNavegacion" [matTooltip]="NombreUsuario || 'Perfil'" [title]="NombreUsuario || 'Perfil'"
14
+ (click)="irAPerfil()">
14
15
  <mat-icon>person</mat-icon>
15
16
  </button>
16
17
  } @else {
17
- <button class="botonDeNavegacion" matTooltip="Entrar" (click)="Entrar()">
18
+ <button class="botonDeNavegacion" matTooltip="Entrar" title="Entrar" (click)="Entrar()">
18
19
  <mat-icon>login</mat-icon>
19
20
  </button>
20
21
  }
21
22
  </div>
22
23
  </div>
23
24
 
25
+ @if(TienePermiso){
26
+ <div class="titulo">
27
+ <div class="pie-col izquierda"></div>
28
+ <div class="pie-col centro">{{ Titulo }}</div>
29
+ <div class="pie-col derecha">
30
+ <button class="botonDeNavegacion ColorBlanco" matTooltip="Ir atrás" title="Ir atrás" (click)="irAtras()">
31
+ <mat-icon>arrow_back</mat-icon>
32
+ </button>
33
+ <button class="botonDeNavegacion ColorBlanco" matTooltip="Ir al menú del módulo" title="Ir al menú del módulo"
34
+ (click)="irAlMenuDeModulo()">
35
+ <mat-icon>menu</mat-icon>
36
+ </button>
37
+ <!-- <button class="botonDeNavegacion" matTooltip="Ir al móudulo padre" title="Ir al móudulo padre" (click)="irAlModuloPadre()">
38
+ <mat-icon>apps</mat-icon>
39
+ </button> -->
40
+ <button class="botonDeNavegacion ColorBlanco" matTooltip="Ir al inicio" title="Ir al inicio"
41
+ (click)="irAlInicio()">
42
+ <mat-icon>home</mat-icon>
43
+ </button>
44
+ </div>
45
+ </div>
46
+ }
24
47
  <div class="zona-scrollable">
25
- @if(TienePermiso){
26
- <div class="titulo">{{ Titulo }}</div>
27
- }
28
48
  <div [ngClass]="claseDelContenedor">
29
- @if(TienePermiso) {
49
+ <!-- @if(TienePermiso) {
30
50
  <div class="botonesDeNavegacion">
31
- <button class="botonDeNavegacion" matTooltip="Ir atrás" (click)="irAtras()">
51
+ <button class="botonDeNavegacion" matTooltip="Ir atrás" title="Ir atrás" (click)="irAtras()">
32
52
  <mat-icon>arrow_back</mat-icon>
33
53
  </button>
34
- <button class="botonDeNavegacion" matTooltip="Ir al menú del módulo" (click)="irAlMenuDeModulo()">
54
+ <button class="botonDeNavegacion" matTooltip="Ir al menú del módulo" title="Ir al menú del módulo"
55
+ (click)="irAlMenuDeModulo()">
35
56
  <mat-icon>menu</mat-icon>
36
- </button>
37
- <!-- <button class="botonDeNavegacion" matTooltip="Ir al móudulo padre" (click)="irAlModuloPadre()">
57
+ </button> -->
58
+ <!-- <button class="botonDeNavegacion" matTooltip="Ir al móudulo padre" title="Ir al móudulo padre" (click)="irAlModuloPadre()">
38
59
  <mat-icon>apps</mat-icon>
39
60
  </button> -->
40
- <button class="botonDeNavegacion" matTooltip="Ir al inicio" (click)="irAlInicio()">
61
+ <!-- <button class="botonDeNavegacion" matTooltip="Ir al inicio" title="Ir al inicio" (click)="irAlInicio()">
41
62
  <mat-icon>home</mat-icon>
42
63
  </button>
43
64
  </div>
44
- }
65
+ } -->
45
66
  <div class="contenido">
46
67
  @if(TienePermiso){
47
68
  <div class="cabecera2">
@@ -79,7 +100,8 @@
79
100
  </div>
80
101
  </div>
81
102
  <div class="pie-col derecha">
82
- <button class="botonDeNavegacion" matTooltip="Aplicaciones" [matMenuTriggerFor]="menuAplicaciones">
103
+ <button class="botonDeNavegacion" matTooltip="Aplicaciones" title="Aplicaciones"
104
+ [matMenuTriggerFor]="menuAplicaciones">
83
105
  <mat-icon>keyboard_arrow_up</mat-icon>
84
106
  </button>
85
107
 
@@ -97,7 +119,7 @@
97
119
  </mat-menu>
98
120
 
99
121
  @if(TienePermiso) {
100
- <button class="botonDeNavegacion" matTooltip="Mensajes" (click)="irAMensajes()">
122
+ <button class="botonDeNavegacion" matTooltip="Mensajes" title="Mensajes" (click)="irAMensajes()">
101
123
  @if (Mensajes.length > 0) {
102
124
  <mat-icon>mark_email_unread</mat-icon>
103
125
  } @else {
@@ -106,16 +128,16 @@
106
128
  </button>
107
129
  }
108
130
  @if(EnlaceDelVideo !== '-') {
109
- <button class="botonDeNavegacion" matTooltip="Vídeo" (click)="irAVideo()">
131
+ <button class="botonDeNavegacion" matTooltip="Vídeo" title="Vídeo" (click)="irAVideo()">
110
132
  <mat-icon>live_tv</mat-icon>
111
133
  </button>
112
134
  }
113
135
  @if(EnlaceDelManual !== '-') {
114
- <button class="botonDeNavegacion" matTooltip="Ayuda" (click)="irAAyuda()">
136
+ <button class="botonDeNavegacion" matTooltip="Ayuda" title="Ayuda" (click)="irAAyuda()">
115
137
  <mat-icon>help</mat-icon>
116
138
  </button>
117
139
  }
118
- <button class="botonDeNavegacion" matTooltip="Reporte" (click)="irASoporte()">
140
+ <button class="botonDeNavegacion" matTooltip="Reporte" title="Reporte" (click)="irASoporte()">
119
141
  <mat-icon>support_agent</mat-icon>
120
142
  </button>
121
143
  </div>
@@ -18,6 +18,7 @@
18
18
  <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
19
19
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
20
20
  <script src="https://accounts.google.com/gsi/client" async defer></script>
21
+ <meta description="Universidad Técnica Nacional - SIGU">
21
22
  </head>
22
23
 
23
24
  <body>