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 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.16.0** — [Ver en npm](https://www.npmjs.com/package/g360-cli)
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
- | `npm test` | Ejecutar tests con Vitest (53 tests, 9 suites) |
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 — 53 tests, 9 suites
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-detected desde `skill.json` |
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 (A4 portrait) | Impresion/pdfs |
1362
- | `demo` | Presentaciones comerciales (16:9) | Proyector/screens |
1363
- | `onboarding` | Guia de inicio rapido | Pantalla |
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 A4 para app CIPSA (auto-detected desde skill.json)
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 G360
1375
- g360 pptx . --mode demo --theme g360 --out demo.pptx
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 (modo manual, A4):**
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? | Proposito de la app |
1387
- | 3 | Instalacion | Pasos de inicio |
1388
- | 4 | Dashboard | Screenshot principal (placeholder si no hay) |
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 | Resumen | Sintesis final |
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 con marco punteado.
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 #10B981, fondo claro
1406
- - **`cipsa`**: Verde CIPSA #00d084, logo corporativo incluido
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "g360-cli",
3
- "version": "1.16.0",
3
+ "version": "1.17.0",
4
4
  "description": "CLI tool for bootstrapping G360 projects with standardized structure, assets, identity, and ERP data processing",
5
5
  "type": "module",
6
6
  "main": "src/cli.js",
@@ -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
+ }