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.
- package/commands/frontend.js +37 -2
- package/package.json +1 -1
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta/tarjeta.component.css +18 -10
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta/tarjeta.component.html +4 -10
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-multiple/tarjeta-multiple.component.css +19 -7
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-multiple/tarjeta-multiple.component.html +4 -7
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-personalizada/tarjeta-personalizada.component.css +17 -10
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-personalizada/tarjeta-personalizada.component.html +4 -10
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-reporte/tarjeta-reporte.component.css +18 -8
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-reporte/tarjeta-reporte.component.html +4 -10
package/commands/frontend.js
CHANGED
|
@@ -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
|
@@ -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: #
|
|
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: #
|
|
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 .
|
|
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
|
-
|
|
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 .
|
|
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()"
|
|
2
|
-
<div class="cabecera_contenedor">
|
|
3
|
-
<
|
|
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: #
|
|
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:
|
|
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: #
|
|
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()"
|
|
2
|
-
<div class="cabecera_contenedor">
|
|
3
|
-
<
|
|
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: #
|
|
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: #
|
|
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 .
|
|
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
|
-
|
|
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 .
|
|
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()"
|
|
2
|
-
<div class="cabecera_contenedor">
|
|
3
|
-
<
|
|
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>
|
package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-reporte/tarjeta-reporte.component.css
CHANGED
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
|
|
7
7
|
.contenedor {
|
|
8
8
|
width: 100%;
|
|
9
|
-
background: #
|
|
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: #
|
|
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 .
|
|
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 .
|
|
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 {
|
package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-reporte/tarjeta-reporte.component.html
CHANGED
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
<div class="contenedor" (click)="onClick()"
|
|
2
|
-
<div class="cabecera_contenedor">
|
|
3
|
-
<
|
|
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> -->
|