utn-cli 2.1.31 → 2.1.33

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.
@@ -55,14 +55,16 @@ export async function updateFrontend(opciones = { cerrarAlFinalizar: true }) {
55
55
  // Copiar archivos base
56
56
  copiarDirectorios(directoriodePlantillas, directorioDestino, archivosAExcluir);
57
57
 
58
- // Copiar AccionesPersonalizadas.ts solo si no existe en el destino
58
+ // Copiar AccionesPersonalizadas.ts solo si no existe en el destino; si existe, asegurar referencias de MatDialog
59
59
  const rutaAccionesDestino = path.join(directorioDestino, 'src', 'app', 'Paginas', 'contenedor-principal', 'AccionesPersonalizadas.ts');
60
+ const rutaAccionesTemplate = path.join(directoriodePlantillas, 'src', 'app', 'Paginas', 'contenedor-principal', 'AccionesPersonalizadas.ts');
60
61
  if (!fs.existsSync(rutaAccionesDestino)) {
61
- const rutaAccionesTemplate = path.join(directoriodePlantillas, 'src', 'app', 'Paginas', 'contenedor-principal', 'AccionesPersonalizadas.ts');
62
62
  if (fs.existsSync(rutaAccionesTemplate)) {
63
63
  fs.copyFileSync(rutaAccionesTemplate, rutaAccionesDestino);
64
64
  console.log('AccionesPersonalizadas.ts no encontrado, se copió desde la plantilla.');
65
65
  }
66
+ } else {
67
+ mergearAccionesPersonalizadas(rutaAccionesDestino);
66
68
  }
67
69
 
68
70
  // Merge de app.routes.ts
@@ -90,6 +92,39 @@ export async function updateFrontend(opciones = { cerrarAlFinalizar: true }) {
90
92
  }
91
93
  }
92
94
 
95
+ function mergearAccionesPersonalizadas(rutaArchivo) {
96
+ let contenido = fs.readFileSync(rutaArchivo, 'utf-8');
97
+ let modificado = false;
98
+
99
+ const importMatDialog = `import { MatDialog } from '@angular/material/dialog';`;
100
+ if (!contenido.includes(importMatDialog)) {
101
+ // Insertar después del último import existente
102
+ const ultimoImport = contenido.lastIndexOf("import {");
103
+ if (ultimoImport !== -1) {
104
+ const finLinea = contenido.indexOf('\n', ultimoImport);
105
+ contenido = contenido.slice(0, finLinea + 1) + importMatDialog + '\n' + contenido.slice(finLinea + 1);
106
+ } else {
107
+ contenido = importMatDialog + '\n' + contenido;
108
+ }
109
+ modificado = true;
110
+ }
111
+
112
+ const propiedadDialog = ` dialog: MatDialog;`;
113
+ if (!contenido.includes(propiedadDialog)) {
114
+ // Insertar antes del cierre de la interfaz DependenciasDeAccion
115
+ const cierreInterfaz = contenido.indexOf('}', contenido.indexOf('DependenciasDeAccion'));
116
+ if (cierreInterfaz !== -1) {
117
+ contenido = contenido.slice(0, cierreInterfaz) + propiedadDialog + '\n' + contenido.slice(cierreInterfaz);
118
+ modificado = true;
119
+ }
120
+ }
121
+
122
+ if (modificado) {
123
+ fs.writeFileSync(rutaArchivo, contenido);
124
+ console.log('AccionesPersonalizadas.ts: referencias de MatDialog agregadas.');
125
+ }
126
+ }
127
+
93
128
  function mergeRoutesFrontend(rutaDestino, rutaFuente) {
94
129
  let contenidoDestino = fs.readFileSync(rutaDestino, 'utf-8');
95
130
  const contenidoFuente = fs.readFileSync(rutaFuente, 'utf-8');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "utn-cli",
3
- "version": "2.1.31",
3
+ "version": "2.1.33",
4
4
  "description": "Herramienta CLI unificada para la gestión de plantillas en SIGU.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -7,9 +7,10 @@
7
7
  .contenedor {
8
8
  width: 100%;
9
9
  /* Ocupa todo el espacio que le dé el padre (cdkDrag) */
10
- background: #ffffff 0% 0% no-repeat padding-box;
10
+ background: #f2f2f2 0% 0% no-repeat padding-box;
11
11
  box-shadow: 0px 3px 6px #00000029;
12
12
  border-radius: 10px;
13
+ border: 1px solid #012169;
13
14
  opacity: 1;
14
15
  padding: 16px;
15
16
  cursor: pointer;
@@ -18,11 +19,21 @@
18
19
  height: 100%;
19
20
  /* Asegura que todas las tarjetas tengan la misma altura si se desea */
20
21
  box-sizing: border-box;
22
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
23
+ }
24
+
25
+ .contenedor:hover {
26
+ transform: translateY(-4px);
27
+ box-shadow: 0px 8px 16px #00000038;
21
28
  }
22
29
 
23
30
  /* Eliminamos los media queries antiguos que forzaban anchos en vw */
24
31
 
25
32
  .contenedor .cabecera_contenedor {
33
+ background: #8bb8eb;
34
+ margin: -16px -16px 16px -16px;
35
+ padding: 16px;
36
+ border-radius: 9px 9px 0 0;
26
37
  display: flex;
27
38
  flex-direction: row;
28
39
  align-items: flex-start;
@@ -34,9 +45,9 @@
34
45
  }
35
46
 
36
47
  .contenedor .cabecera_contenedor .icono {
37
- background: #eef2ff 0% 0% no-repeat padding-box;
38
- opacity: 1;
48
+ background: #f2f2f2;
39
49
  border-radius: 50%;
50
+ border: 2px solid #ffffff;
40
51
  display: flex;
41
52
  align-items: center;
42
53
  justify-content: center;
@@ -53,14 +64,10 @@
53
64
  font-size: large;
54
65
  }
55
66
 
56
- .contenedor .cabecera {
67
+ .contenedor .cabecera_contenedor .titulo {
57
68
  flex: 1;
58
- /* Permite que el texto ocupe todo el espacio sobrante */
59
69
  min-width: 0;
60
- /* Permite truncar texto si es muy largo en móviles */
61
- }
62
-
63
- .contenedor .cabecera .titulo {
70
+ padding-top: 6px;
64
71
  text-align: left;
65
72
  font-family: "Roboto";
66
73
  font-size: large;
@@ -70,13 +77,14 @@
70
77
  opacity: 1;
71
78
  }
72
79
 
73
- .contenedor .cabecera .descripcion {
80
+ .contenedor .descripcion {
74
81
  text-align: left;
75
82
  font-family: "Roboto";
76
83
  font-size: small;
77
84
  letter-spacing: 0px;
78
85
  color: #000000;
79
86
  opacity: 1;
87
+ padding: 8px 0 0;
80
88
  }
81
89
 
82
90
  .contenedor .contenido {
@@ -1,13 +1,6 @@
1
- <div class="contenedor" (click)="onClick()" [style.border]="ColorDeBorde ? '1px solid ' + ColorDeBorde : ''">
2
- <div class="cabecera_contenedor">
3
- <div class="cabecera">
4
- <p class="titulo">
5
- {{ titulo }}
6
- </p>
7
- <p class="descripcion">
8
- {{ descripcion }}
9
- </p>
10
- </div>
1
+ <div class="contenedor" (click)="onClick()">
2
+ <div class="cabecera_contenedor" [style.background]="ColorDeBorde || '#8bb8eb'">
3
+ <p class="titulo">{{ titulo }}</p>
11
4
  <div class="icono">
12
5
  @if(icono){
13
6
  <mat-icon [fontIcon]="icono"></mat-icon>
@@ -16,6 +9,7 @@
16
9
  }
17
10
  </div>
18
11
  </div>
12
+ <p class="descripcion">{{ descripcion }}</p>
19
13
  <div class="contenido">
20
14
  @if(contenido.length>0){ @for(item of contenido[0];track item){
21
15
  <p>{{ item }}</p>
@@ -7,30 +7,40 @@
7
7
  .contenedor {
8
8
  width: 100%;
9
9
  padding: 16px;
10
- background: #ffffff;
10
+ background: #f2f2f2;
11
11
  box-shadow: 0px 3px 6px #00000029;
12
12
  border-radius: 10px;
13
+ border: 1px solid #012169;
13
14
  cursor: pointer;
14
15
  display: flex;
15
16
  flex-direction: column;
16
17
  height: 100%;
17
18
  box-sizing: border-box;
19
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
20
+ }
21
+
22
+ .contenedor:hover {
23
+ transform: translateY(-4px);
24
+ box-shadow: 0px 8px 16px #00000038;
18
25
  }
19
26
 
20
27
  /* Eliminamos los media queries antiguos que forzaban anchos en vw */
21
28
 
22
29
  .cabecera_contenedor {
30
+ background: #8bb8eb;
31
+ margin: -16px -16px 16px -16px;
32
+ padding: 16px;
33
+ border-radius: 9px 9px 0 0;
23
34
  display: flex;
24
35
  flex-direction: row;
25
- align-items: center;
36
+ align-items: flex-start;
26
37
  justify-content: space-between;
27
38
  }
28
39
 
29
- .cabecera {
30
- width: 90%;
31
- }
32
-
33
40
  .titulo {
41
+ flex: 1;
42
+ min-width: 0;
43
+ padding-top: 6px;
34
44
  font-family: "Roboto";
35
45
  font-size: large;
36
46
  font-weight: 600;
@@ -43,11 +53,13 @@
43
53
  font-size: small;
44
54
  color: #000000;
45
55
  text-align: left;
56
+ padding: 8px 0 0;
46
57
  }
47
58
 
48
59
  .icono {
49
- background: #eef2ff;
60
+ background: #f2f2f2;
50
61
  border-radius: 50%;
62
+ border: 2px solid #ffffff;
51
63
  display: flex;
52
64
  align-items: center;
53
65
  justify-content: center;
@@ -1,10 +1,6 @@
1
- <div class="contenedor" (click)="irAPrimeraRuta()" [style.border]="ColorDeBorde ? '1px solid ' + ColorDeBorde : ''">
2
- <div class="cabecera_contenedor">
3
- <div class="cabecera">
4
- <p class="titulo">{{ titulo }}</p>
5
- <p class="descripcion">{{ descripcion }}</p>
6
- </div>
7
-
1
+ <div class="contenedor" (click)="irAPrimeraRuta()">
2
+ <div class="cabecera_contenedor" [style.background]="ColorDeBorde || '#8bb8eb'">
3
+ <p class="titulo">{{ titulo }}</p>
8
4
  <div #iconoRef class="icono" (click)="$event.stopPropagation(); mostrarMenu = !mostrarMenu">
9
5
  <mat-icon [fontIcon]="'keyboard_arrow_down'"></mat-icon>
10
6
 
@@ -19,4 +15,5 @@
19
15
  }
20
16
  </div>
21
17
  </div>
18
+ <p class="descripcion">{{ descripcion }}</p>
22
19
  </div>
@@ -7,7 +7,7 @@
7
7
  .contenedor {
8
8
  width: 100%;
9
9
  /* Ocupa todo el espacio que le dé el padre (cdkDrag) */
10
- background: #ffffff 0% 0% no-repeat padding-box;
10
+ background: #f2f2f2 0% 0% no-repeat padding-box;
11
11
  box-shadow: 0px 3px 6px #00000029;
12
12
  border-radius: 10px;
13
13
  opacity: 1;
@@ -18,11 +18,21 @@
18
18
  height: 100%;
19
19
  /* Asegura que todas las tarjetas tengan la misma altura si se desea */
20
20
  box-sizing: border-box;
21
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
22
+ }
23
+
24
+ .contenedor:hover {
25
+ transform: translateY(-4px);
26
+ box-shadow: 0px 8px 16px #00000038;
21
27
  }
22
28
 
23
29
  /* Eliminamos los media queries antiguos que forzaban anchos en vw */
24
30
 
25
31
  .contenedor .cabecera_contenedor {
32
+ background: #8bb8eb;
33
+ margin: -16px -16px 16px -16px;
34
+ padding: 16px;
35
+ border-radius: 9px 9px 0 0;
26
36
  display: flex;
27
37
  flex-direction: row;
28
38
  align-items: flex-start;
@@ -34,9 +44,9 @@
34
44
  }
35
45
 
36
46
  .contenedor .cabecera_contenedor .icono {
37
- background: #eef2ff 0% 0% no-repeat padding-box;
38
- opacity: 1;
47
+ background: #f2f2f2;
39
48
  border-radius: 50%;
49
+ border: 2px solid #ffffff;
40
50
  display: flex;
41
51
  align-items: center;
42
52
  justify-content: center;
@@ -53,14 +63,10 @@
53
63
  font-size: large;
54
64
  }
55
65
 
56
- .contenedor .cabecera {
66
+ .contenedor .cabecera_contenedor .titulo {
57
67
  flex: 1;
58
- /* Permite que el texto ocupe todo el espacio sobrante */
59
68
  min-width: 0;
60
- /* Permite truncar texto si es muy largo en móviles */
61
- }
62
-
63
- .contenedor .cabecera .titulo {
69
+ padding-top: 6px;
64
70
  text-align: left;
65
71
  font-family: "Roboto";
66
72
  font-size: large;
@@ -70,13 +76,14 @@
70
76
  opacity: 1;
71
77
  }
72
78
 
73
- .contenedor .cabecera .descripcion {
79
+ .contenedor .descripcion {
74
80
  text-align: left;
75
81
  font-family: "Roboto";
76
82
  font-size: small;
77
83
  letter-spacing: 0px;
78
84
  color: #000000;
79
85
  opacity: 1;
86
+ padding: 8px 0 0;
80
87
  }
81
88
 
82
89
  .contenedor .contenido {
@@ -1,13 +1,6 @@
1
- <div class="contenedor" (click)="onClick()" [style.border-left]="ColorDeBorde ? '10px solid ' + ColorDeBorde : ''">
2
- <div class="cabecera_contenedor">
3
- <div class="cabecera">
4
- <p class="titulo">
5
- {{ titulo }}
6
- </p>
7
- <p class="descripcion">
8
- {{ descripcion }}
9
- </p>
10
- </div>
1
+ <div class="contenedor" (click)="onClick()">
2
+ <div class="cabecera_contenedor" [style.background]="ColorDeBorde || '#8bb8eb'">
3
+ <p class="titulo">{{ titulo }}</p>
11
4
  <div class="icono">
12
5
  @if(icono){
13
6
  <mat-icon [fontIcon]="icono"></mat-icon>
@@ -16,6 +9,7 @@
16
9
  }
17
10
  </div>
18
11
  </div>
12
+ <p class="descripcion">{{ descripcion }}</p>
19
13
  <div class="contenido">
20
14
  @if(contenido.length>0){ @for(item of contenido[0];track item){
21
15
  <p>{{ item }}</p>
@@ -6,9 +6,10 @@
6
6
 
7
7
  .contenedor {
8
8
  width: 100%;
9
- background: #ffffff 0% 0% no-repeat padding-box;
9
+ background: #f2f2f2 0% 0% no-repeat padding-box;
10
10
  box-shadow: 0px 3px 6px #00000029;
11
11
  border-radius: 10px;
12
+ border: 1px solid #012169;
12
13
  opacity: 1;
13
14
  padding: 16px;
14
15
  cursor: pointer;
@@ -16,11 +17,21 @@
16
17
  flex-direction: column;
17
18
  height: 100%;
18
19
  box-sizing: border-box;
20
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
21
+ }
22
+
23
+ .contenedor:hover {
24
+ transform: translateY(-4px);
25
+ box-shadow: 0px 8px 16px #00000038;
19
26
  }
20
27
 
21
28
  /* Eliminamos los media queries antiguos que forzaban anchos en vw */
22
29
 
23
30
  .contenedor .cabecera_contenedor {
31
+ background: #8bb8eb;
32
+ margin: -16px -16px 16px -16px;
33
+ padding: 16px;
34
+ border-radius: 9px 9px 0 0;
24
35
  display: flex;
25
36
  flex-direction: row;
26
37
  align-items: flex-start;
@@ -29,9 +40,9 @@
29
40
  }
30
41
 
31
42
  .contenedor .cabecera_contenedor .icono {
32
- background: #eef2ff 0% 0% no-repeat padding-box;
33
- opacity: 1;
43
+ background: #f2f2f2;
34
44
  border-radius: 50%;
45
+ border: 2px solid #ffffff;
35
46
  display: flex;
36
47
  align-items: center;
37
48
  justify-content: center;
@@ -47,12 +58,10 @@
47
58
  font-size: large;
48
59
  }
49
60
 
50
- .contenedor .cabecera {
61
+ .contenedor .cabecera_contenedor .titulo {
51
62
  flex: 1;
52
63
  min-width: 0;
53
- }
54
-
55
- .contenedor .cabecera .titulo {
64
+ padding-top: 6px;
56
65
  text-align: left;
57
66
  font-family: "Roboto";
58
67
  font-size: large;
@@ -62,13 +71,14 @@
62
71
  opacity: 1;
63
72
  }
64
73
 
65
- .contenedor .cabecera .descripcion {
74
+ .contenedor .descripcion {
66
75
  text-align: left;
67
76
  font-family: "Roboto";
68
77
  font-size: small;
69
78
  letter-spacing: 0px;
70
79
  color: #000000;
71
80
  opacity: 1;
81
+ padding: 8px 0 0;
72
82
  }
73
83
 
74
84
  .contenedor .contenido {
@@ -1,19 +1,13 @@
1
- <div class="contenedor" (click)="onClick()" [style.border]="ColorDeBorde ? '1px solid ' + ColorDeBorde : ''">
2
- <div class="cabecera_contenedor">
3
- <div class="cabecera">
4
- <p class="titulo">
5
- {{ titulo }}
6
- </p>
7
- <p class="descripcion">
8
- {{ descripcion }}
9
- </p>
10
- </div>
1
+ <div class="contenedor" (click)="onClick()">
2
+ <div class="cabecera_contenedor" [style.background]="ColorDeBorde || '#8bb8eb'">
3
+ <p class="titulo">{{ titulo }}</p>
11
4
  <div class="icono">
12
5
  @if(icono){
13
6
  <mat-icon [fontIcon]="icono"></mat-icon>
14
7
  }
15
8
  </div>
16
9
  </div>
10
+ <p class="descripcion">{{ descripcion }}</p>
17
11
  <!-- <div class="pie">
18
12
  <p>CONTINUAR</p>
19
13
  </div> -->