g360-cli 1.16.0 → 1.17.0
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/README.md +37 -27
- package/package.json +1 -1
- package/src/assets/pptx/design-tokens.js +124 -0
- package/src/assets/pptx/layouts/base.js +357 -155
- package/src/assets/pptx/layouts/index.js +6 -1
- package/src/assets/pptx/scripts/analyze-app.js +177 -13
- package/src/assets/pptx/scripts/image-size.js +56 -0
- package/src/assets/pptx/templates/app-manual.js +324 -202
- package/src/assets/pptx/themes/base.js +6 -61
- package/src/assets/pptx/themes/cipsa.js +2 -44
- package/src/assets/pptx/themes/g360.js +2 -30
- package/src/assets/pptx/themes/index.js +87 -2
- package/src/commands/pptx.js +9 -7
package/README.md
CHANGED
|
@@ -97,7 +97,7 @@ CLI tool para el ecosistema G360 que permite inicializar proyectos con estructur
|
|
|
97
97
|
|
|
98
98
|
## Versión
|
|
99
99
|
|
|
100
|
-
**Current: v1.
|
|
100
|
+
**Current: v1.17.0** — [Ver en npm](https://www.npmjs.com/package/g360-cli)
|
|
101
101
|
|
|
102
102
|
---
|
|
103
103
|
|
|
@@ -1151,7 +1151,7 @@ g360-cli/
|
|
|
1151
1151
|
|---------|-------------|
|
|
1152
1152
|
| `npm run build` | Build portable con pkg (g360.exe) |
|
|
1153
1153
|
| `npm run build:portable` | Especificar target node18-win-x64 |
|
|
1154
|
-
|
|
1154
|
+
| `npm test` | Ejecutar tests con Vitest (57 tests, 9 suites) |
|
|
1155
1155
|
| `npm run prepublishOnly` | Validación antes de publicar en npm |
|
|
1156
1156
|
|
|
1157
1157
|
---
|
|
@@ -1159,7 +1159,7 @@ g360-cli/
|
|
|
1159
1159
|
## Testing
|
|
1160
1160
|
|
|
1161
1161
|
```bash
|
|
1162
|
-
npm test # Vitest —
|
|
1162
|
+
npm test # Vitest — 57 tests, 9 suites
|
|
1163
1163
|
npm run test:watch # Modo watch
|
|
1164
1164
|
npm run test:ui # UI interactiva
|
|
1165
1165
|
npm run test:coverage
|
|
@@ -1339,7 +1339,7 @@ g360 lint --project ./mi-proyecto
|
|
|
1339
1339
|
|
|
1340
1340
|
### `g360 pptx`
|
|
1341
1341
|
|
|
1342
|
-
Genera manuales y presentaciones en PowerPoint (.pptx) desde una app G360.
|
|
1342
|
+
Genera manuales y presentaciones en PowerPoint (.pptx) desde una app G360. Detecta automáticamente el framework (Flet, SvelteKit, Lit, React, Vue), los módulos UI, las capacidades (PWA, Supabase, Excel, búsqueda) y el tema de marca. El archivo se genera **dentro del propio repo de la app**, independiente para cada proyecto.
|
|
1343
1343
|
|
|
1344
1344
|
```bash
|
|
1345
1345
|
g360 pptx [ruta] [opciones]
|
|
@@ -1350,60 +1350,70 @@ g360 pptx [ruta] [opciones]
|
|
|
1350
1350
|
| Opción | Descripción | Valor por defecto |
|
|
1351
1351
|
|--------|-------------|-------------------|
|
|
1352
1352
|
| `--mode <tipo>` | Modo de generacion (`manual`, `demo`, `onboarding`) | `manual` |
|
|
1353
|
-
| `--theme <nombre>` | Tema de marca (`g360`, `cipsa`) | auto-
|
|
1354
|
-
| `--out <archivo>` | Ruta del archivo de salida | `{app-name}-manual.pptx` |
|
|
1353
|
+
| `--theme <nombre>` | Tema de marca (`g360`, `cipsa`, `corporate`) | auto-detectado desde `skill.json` |
|
|
1354
|
+
| `--out <archivo>` | Ruta del archivo de salida | `{repo}/{app-name}-manual.pptx` |
|
|
1355
1355
|
| `--dry-run` | Solo muestra outline sin generar | `false` |
|
|
1356
1356
|
|
|
1357
1357
|
**Modos:**
|
|
1358
1358
|
|
|
1359
1359
|
| Modo | Proposito | Formato |
|
|
1360
1360
|
|------|-----------|---------|
|
|
1361
|
-
| `manual` | Documentacion de usuario
|
|
1362
|
-
| `demo` | Presentaciones comerciales
|
|
1363
|
-
| `onboarding` | Guia de inicio rapido |
|
|
1361
|
+
| `manual` | Documentacion de usuario | 16:9 (compartir/imprimir) |
|
|
1362
|
+
| `demo` | Presentaciones comerciales | 16:9 (proyector/screens) |
|
|
1363
|
+
| `onboarding` | Guia de inicio rapido | 16:9 |
|
|
1364
|
+
|
|
1365
|
+
**Detección automática por framework:**
|
|
1366
|
+
|
|
1367
|
+
| Framework | Módulos UI | Capacidad |
|
|
1368
|
+
|-----------|-----------|-----------|
|
|
1369
|
+
| Flet | `src/ui/*.py` + `src/ui/modals/` | desde `src/app.py` (auto-refresh, search, export) |
|
|
1370
|
+
| SvelteKit | `src/routes/**/+page.svelte` (incluye subrutas dinámicas) | desde `package.json` |
|
|
1371
|
+
| Lit / React / Vue | `src/components/*.js\|ts` | desde `package.json` (supabase, PWA, exceljs, charts, tailwind) |
|
|
1364
1372
|
|
|
1365
1373
|
**Ejemplos:**
|
|
1366
1374
|
|
|
1367
1375
|
```bash
|
|
1368
|
-
# Generar manual
|
|
1376
|
+
# Generar manual dentro del repo de la app (theme auto-detectado)
|
|
1377
|
+
g360 pptx ../g360-ventas-pulse
|
|
1378
|
+
|
|
1379
|
+
# Manual para app CIPSA (auto-detectado desde skill.json)
|
|
1369
1380
|
g360 pptx ../mi-app --mode manual
|
|
1370
1381
|
|
|
1371
1382
|
# Solo preview del outline
|
|
1372
1383
|
g360 pptx . --dry-run
|
|
1373
1384
|
|
|
1374
|
-
# Presentacion 16:9 con tema
|
|
1375
|
-
g360 pptx . --mode demo --theme
|
|
1376
|
-
|
|
1377
|
-
# Onboarding en modo print
|
|
1378
|
-
g360 pptx . --mode onboarding --out onboarding.pptx
|
|
1385
|
+
# Presentacion 16:9 con tema corporate
|
|
1386
|
+
g360 pptx . --mode demo --theme corporate --out demo.pptx
|
|
1379
1387
|
```
|
|
1380
1388
|
|
|
1381
|
-
**Estructura generada (
|
|
1389
|
+
**Estructura generada (16:9 widescreen 13.33x7.5in):**
|
|
1382
1390
|
|
|
1383
1391
|
| # | Slide | Contenido |
|
|
1384
1392
|
|---|-------|-----------|
|
|
1385
|
-
| 1 | Portada | Nombre + descripcion + version |
|
|
1386
|
-
| 2 | ¿Que es? |
|
|
1387
|
-
| 3 |
|
|
1388
|
-
| 4 |
|
|
1393
|
+
| 1 | Portada | Nombre + descripcion + tagline + version + logo |
|
|
1394
|
+
| 2 | ¿Que es? | Descripcion + tarjetas usuario/tecnico + capacidades |
|
|
1395
|
+
| 3 | Modulos | Tabla de modulos + capturas laterales |
|
|
1396
|
+
| 4 | Flujo de trabajo | Pasos numerados + capturas |
|
|
1389
1397
|
| 5-N | Features | Una por modulo UI detectado |
|
|
1390
|
-
| N+1 | Flujos | Modals y workflows |
|
|
1398
|
+
| N+1 | Flujos | Modals y workflows (PWA, busqueda en web) |
|
|
1391
1399
|
| N+2 | Arquitectura | Diagrama por capas |
|
|
1392
1400
|
| N+3 | Buenas practicas | Checklist de uso |
|
|
1393
|
-
| N+4 |
|
|
1401
|
+
| N+4 | Limites conocidos | Solo si el proyecto define `limits` |
|
|
1402
|
+
| N+5 | Resumen | Sintesis final |
|
|
1394
1403
|
|
|
1395
1404
|
**Screenshots:**
|
|
1396
1405
|
|
|
1397
|
-
Colocar imagenes en `assets/screenshots/` para inclusion automatica:
|
|
1406
|
+
Colocar imagenes en `assets/screenshots/` para inclusion automatica con encaje proporcional (nunca distorsiona):
|
|
1398
1407
|
- `dashboard.png` — vista principal
|
|
1399
1408
|
- `kpi-card.png`, `modal-export.png` — componentes relevantes
|
|
1400
1409
|
|
|
1401
|
-
Si no hay screenshots, se generan placeholders
|
|
1410
|
+
Si no hay screenshots, se generan placeholders-guia ("CAPTURA PENDIENTE") que indican que capturar y donde guardarlo.
|
|
1402
1411
|
|
|
1403
|
-
**Temas disponibles
|
|
1412
|
+
**Temas disponibles** (design tokens unificados en `design-tokens.js`):
|
|
1404
1413
|
|
|
1405
|
-
- **`g360`**: Esmeralda
|
|
1406
|
-
- **`cipsa`**: Verde
|
|
1414
|
+
- **`g360`**: Esmeralda `#10B981` sobre slate (default)
|
|
1415
|
+
- **`cipsa`**: Verde corporativo `#008F5D`, logo CIPSA
|
|
1416
|
+
- **`corporate`**: Azul marino `#1E40AF`, neutral para apps sin marca
|
|
1407
1417
|
|
|
1408
1418
|
---
|
|
1409
1419
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design tokens del sistema de presentaciones G360.
|
|
3
|
+
* Fuente unica de verdad: todas las paletas, tipografia y espaciados
|
|
4
|
+
* se definen aqui y son consumidos por themes/ y layouts/.
|
|
5
|
+
*
|
|
6
|
+
* Principios:
|
|
7
|
+
* - Formato 16:9 widescreen (13.333 x 7.5 in), tipo deck corporativo.
|
|
8
|
+
* - Un acento principal + un oscuro para titulos + tintes suaves para superficies.
|
|
9
|
+
* - Ambar reservado para advertencias/limites; rojo solo para errores.
|
|
10
|
+
* - Texto principal casi-negro, secundario gris slate.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** Paletas de marca disponibles */
|
|
14
|
+
export const PALETTES = {
|
|
15
|
+
/** G360 — esmeralda tech sobre slate neutro */
|
|
16
|
+
g360: {
|
|
17
|
+
accent: '10B981',
|
|
18
|
+
accentDark: '047857',
|
|
19
|
+
accentSoft: 'E7F6F0',
|
|
20
|
+
onAccent: 'FFFFFF',
|
|
21
|
+
text: '0F172A',
|
|
22
|
+
textMuted: '64748B',
|
|
23
|
+
bg: 'FFFFFF',
|
|
24
|
+
surface: 'F3F5F9',
|
|
25
|
+
border: 'E3E8F0',
|
|
26
|
+
warning: 'B45309',
|
|
27
|
+
warningSoft: 'FDF3E3',
|
|
28
|
+
info: '3B82F6',
|
|
29
|
+
violet: '8B5CF6',
|
|
30
|
+
success: '059669',
|
|
31
|
+
danger: 'DC2626',
|
|
32
|
+
coverTitle: '064E3B',
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
/** CIPSA — verde corporativo (alineado al manual de ventas-pulse) */
|
|
36
|
+
cipsa: {
|
|
37
|
+
accent: '008F5D',
|
|
38
|
+
accentDark: '0B6B47',
|
|
39
|
+
accentSoft: 'E3F0EB',
|
|
40
|
+
onAccent: 'FFFFFF',
|
|
41
|
+
text: '1F2937',
|
|
42
|
+
textMuted: '64748B',
|
|
43
|
+
bg: 'FFFFFF',
|
|
44
|
+
surface: 'F8FAF9',
|
|
45
|
+
border: 'C8E6D8',
|
|
46
|
+
warning: 'B45309',
|
|
47
|
+
warningSoft: 'FBF1E4',
|
|
48
|
+
info: '0369A1',
|
|
49
|
+
violet: '6D28D9',
|
|
50
|
+
success: '008F5D',
|
|
51
|
+
danger: 'DC2626',
|
|
52
|
+
coverTitle: '0B6B47',
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
/** Corporate — azul marino neutral para apps sin marca definida */
|
|
56
|
+
corporate: {
|
|
57
|
+
accent: '1E40AF',
|
|
58
|
+
accentDark: '172554',
|
|
59
|
+
accentSoft: 'E7ECF9',
|
|
60
|
+
onAccent: 'FFFFFF',
|
|
61
|
+
text: '0F172A',
|
|
62
|
+
textMuted: '64748B',
|
|
63
|
+
bg: 'FFFFFF',
|
|
64
|
+
surface: 'F4F6FB',
|
|
65
|
+
border: 'D6DEF0',
|
|
66
|
+
warning: 'B45309',
|
|
67
|
+
warningSoft: 'FDF3E3',
|
|
68
|
+
info: '0E7490',
|
|
69
|
+
violet: '6D28D9',
|
|
70
|
+
success: '047857',
|
|
71
|
+
danger: 'DC2626',
|
|
72
|
+
coverTitle: '172554',
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/** Tipografia: pila de fuentes y escala de puntos */
|
|
77
|
+
export const TYPO = {
|
|
78
|
+
font: 'Inter',
|
|
79
|
+
fallback: 'Arial',
|
|
80
|
+
sizes: {
|
|
81
|
+
coverTitle: 44,
|
|
82
|
+
coverSubtitle: 16,
|
|
83
|
+
coverMeta: 12,
|
|
84
|
+
sectionTitle: 21,
|
|
85
|
+
cardTitle: 12,
|
|
86
|
+
cardBody: 9.5,
|
|
87
|
+
body: 11.5,
|
|
88
|
+
bodySmall: 10,
|
|
89
|
+
caption: 9.5,
|
|
90
|
+
footer: 8,
|
|
91
|
+
kpiValue: 28,
|
|
92
|
+
kpiLabel: 11,
|
|
93
|
+
stepNumber: 12,
|
|
94
|
+
stepTitle: 11.5,
|
|
95
|
+
stepBody: 10.5,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/** Espaciados y metricas del lienzo 16:9 */
|
|
100
|
+
export const SPACING = {
|
|
101
|
+
page: { width: 13.333, height: 7.5 },
|
|
102
|
+
marginX: 0.6,
|
|
103
|
+
get contentWidth() {
|
|
104
|
+
return this.page.width - this.marginX * 2;
|
|
105
|
+
},
|
|
106
|
+
sectionTitleY: 0.3,
|
|
107
|
+
sectionRuleY: 0.85,
|
|
108
|
+
contentTopY: 1.1,
|
|
109
|
+
footerY: 7.12,
|
|
110
|
+
cardGap: 0.2,
|
|
111
|
+
radius: 0.06,
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
/** Layout por defecto registrado en pptxgenjs */
|
|
115
|
+
export const DEFAULT_LAYOUT = 'LAYOUT_16x9_G360';
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Resuelve una paleta por nombre con fallback seguro.
|
|
119
|
+
* @param {string} name — 'g360' | 'cipsa' | 'corporate'
|
|
120
|
+
* @returns {object} paleta
|
|
121
|
+
*/
|
|
122
|
+
export function resolvePalette(name) {
|
|
123
|
+
return PALETTES[name] || PALETTES.g360;
|
|
124
|
+
}
|