holygrail5 1.0.8 → 1.0.10
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 +143 -1003
- package/config.json +245 -152
- package/{generator.js → generate-css.js} +21 -5
- package/package.json +28 -17
- package/src/.data/.previous-values.json +296 -0
- package/src/{config.js → config-loader.js} +3 -3
- package/src/css-generator.js +124 -0
- package/src/{dev.js → dev-server.js} +1 -1
- package/src/{guide.js → docs-generator/html-generator.js} +41 -48
- package/src/{cli-variables.js → docs-generator/variables-cli.js} +9 -9
- package/src/{variables-manager.js → docs-generator/variables-tracker.js} +2 -2
- package/src/generators/grid-generator.js +136 -0
- package/src/generators/helpers-generator.js +76 -0
- package/src/generators/reset-generator.js +73 -0
- package/src/generators/spacing-generator.js +115 -0
- package/src/generators/typo-generator.js +237 -0
- package/src/generators/variables-generator.js +159 -0
- package/src/{watch.js → watch-config.js} +4 -4
- package/themes/dutti/_buttons.css +194 -52
- package/themes/dutti/_checkboxes.css +4 -4
- package/themes/dutti/_forms.css +5 -5
- package/themes/dutti/_inputs.css +4 -4
- package/themes/dutti/_labels.css +4 -4
- package/themes/dutti/_radios.css +4 -4
- package/themes/dutti/_switches.css +4 -4
- package/themes/dutti/_variables.css +1 -8
- package/themes/dutti/demo.html +22 -24
- package/src/parser.js +0 -818
- /package/src/{utils.js → generators/utils.js} +0 -0
package/README.md
CHANGED
|
@@ -3,1046 +3,186 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/holygrail5)
|
|
4
4
|
[](https://www.npmjs.com/package/holygrail5)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
Generador de CSS + guía HTML pensado para design systems ligeros: declaras tu `config.json`, HolyGrail5 crea variables compartidas, helpers responsive, tipografías y documentación navegable en `dist/` sin depender de SASS ni toolchains complejos.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Índice
|
|
11
|
+
1. [Instalación](#1-instalación)
|
|
12
|
+
2. [Flujo rápido](#2-flujo-rápido)
|
|
13
|
+
3. [Scripts disponibles](#3-scripts-disponibles)
|
|
14
|
+
4. [¿Qué se genera?](#4-qué-se-genera)
|
|
15
|
+
5. [Configurar `config.json`](#5-configurar-configjson)
|
|
16
|
+
6. [CLI y argumentos](#6-cli-y-argumentos)
|
|
17
|
+
7. [Guía HTML interactiva](#7-guía-html-interactiva)
|
|
18
|
+
8. [Gestión de variables históricas](#8-gestión-de-variables-históricas)
|
|
19
|
+
9. [Tema Dutti y demos](#9-tema-dutti-y-demos)
|
|
20
|
+
10. [Flujo de desarrollo](#10-flujo-de-desarrollo)
|
|
21
|
+
11. [Tests y calidad](#11-tests-y-calidad)
|
|
22
|
+
12. [Documentos complementarios](#12-documentos-complementarios)
|
|
23
|
+
13. [Recursos y soporte](#13-recursos-y-soporte)
|
|
24
|
+
14. [Licencia](#14-licencia)
|
|
9
25
|
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. Instalación
|
|
10
29
|
```bash
|
|
11
30
|
# Instalación global
|
|
12
31
|
npm install -g holygrail5
|
|
13
32
|
|
|
14
|
-
# Instalación local
|
|
15
|
-
npm install holygrail5
|
|
33
|
+
# Instalación local (recomendada)
|
|
34
|
+
npm install holygrail5 --save-dev
|
|
16
35
|
```
|
|
36
|
+
> Requiere Node.js >= 12 (probado hasta v20).
|
|
17
37
|
|
|
18
|
-
##
|
|
19
|
-
|
|
38
|
+
## 2. Flujo rápido
|
|
20
39
|
```bash
|
|
21
|
-
# 1
|
|
40
|
+
# 1) Genera CSS + guía
|
|
22
41
|
npx holygrail5
|
|
23
42
|
|
|
24
|
-
# 2
|
|
43
|
+
# 2) Sirve dist/ en local
|
|
25
44
|
npm run serve
|
|
26
|
-
#
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## ✨ Características Principales
|
|
30
|
-
|
|
31
|
-
- 🎨 **CSS optimizado** con variables CSS compartidas (mínimas y eficientes)
|
|
32
|
-
- 📱 **Soporte responsive** con breakpoints personalizables (mobile/desktop)
|
|
33
|
-
- 🔧 **Configuración simple** mediante JSON
|
|
34
|
-
- 📊 **Guía HTML interactiva** generada automáticamente con detección de cambios
|
|
35
|
-
- 🛠️ **Helpers de spacing** estilo Tailwind con propiedades lógicas (RTL)
|
|
36
|
-
- 🎨 **Sistema de colores** con variables CSS
|
|
37
|
-
- 📐 **Helpers de layout** (display, flexbox, alignment, gap)
|
|
38
|
-
- 👀 **Modo watch** para desarrollo con regeneración automática
|
|
39
|
-
- 🔍 **Gestión de variables CSS** con historial persistente
|
|
40
|
-
|
|
41
|
-
## ⚖️ ¿Por qué HolyGrail5?
|
|
42
|
-
|
|
43
|
-
| Aspecto | Solo Tailwind | HolyGrail5 (Híbrido) |
|
|
44
|
-
|--------------------------|-------------------------------------------------------------------------------|---------------------------------------------------------------------|
|
|
45
|
-
| Velocidad de desarrollo | 🔥 Muy alta | 🔥 Alta |
|
|
46
|
-
| Consistencia visual | ⚠️ Difícil mantener si hay muchas utilidades | ✅ Mantienes branding y coherencia |
|
|
47
|
-
| Escalabilidad | ⚠️ Costoso en proyectos grandes | ✅ Fácil de mantener |
|
|
48
|
-
| Curva de aprendizaje | Media | Baja si ya vienes de BEM/SCSS |
|
|
49
|
-
| Control sobre design system | ❌ Limitado | ✅ Total |
|
|
50
|
-
| Performance CSS final | ✅ Muy buena | ✅ Muy buena |
|
|
51
|
-
|
|
52
|
-
## 📖 Uso
|
|
53
|
-
|
|
54
|
-
### CLI
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
# Uso básico (genera en dist/)
|
|
58
|
-
npx holygrail5
|
|
59
|
-
# o
|
|
60
|
-
npm run generate
|
|
61
|
-
|
|
62
|
-
# Con argumentos personalizados
|
|
63
|
-
npx holygrail5 --config=./config.json --output=./dist/output.css --html=./dist/index.html
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Módulo Node.js
|
|
67
|
-
|
|
68
|
-
```javascript
|
|
69
|
-
const { generateCSS, generateHTML } = require('holygrail5');
|
|
70
|
-
const config = require('./config.json');
|
|
45
|
+
# http://localhost:3000/index.html
|
|
71
46
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
### Scripts de Desarrollo
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
# Modo watch (regenera automáticamente al cambiar config.json)
|
|
80
|
-
npm run watch
|
|
81
|
-
|
|
82
|
-
# Desarrollo completo (watch + servidor HTTP en localhost:3000)
|
|
83
|
-
npm run dev
|
|
47
|
+
# 3) Trabaja en caliente
|
|
48
|
+
npm run watch # regenera al guardar config.json
|
|
49
|
+
npm run dev # watch + servidor
|
|
84
50
|
|
|
85
|
-
#
|
|
86
|
-
npm run
|
|
87
|
-
|
|
88
|
-
# Generar y abrir servidor
|
|
89
|
-
npm run start
|
|
51
|
+
# 4) Empaqueta tema Dutti y demo
|
|
52
|
+
npm run build # corre generate-css.js + copy-theme-html.js
|
|
90
53
|
```
|
|
91
54
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
55
|
+
## 3. Scripts disponibles
|
|
56
|
+
| Script | Descripción |
|
|
57
|
+
| ------ | ----------- |
|
|
58
|
+
| `npm run build` | Ejecuta `generate-css.js` y copia la demo del tema. |
|
|
59
|
+
| `npm run watch` | Observa `config.json` y regenera CSS/HTML. |
|
|
60
|
+
| `npm run serve` | Abre el navegador y sirve `dist/` en el puerto 3000. |
|
|
61
|
+
| `npm run dev` | Alias práctico: `watch` + `serve`. |
|
|
62
|
+
| `npm run test` | Corre los tests de `tests/run-all.js`. |
|
|
63
|
+
| `npm run vars:report` | Informe completo de variables CSS. |
|
|
64
|
+
| `npm run vars:remove-unused` | Limpia variables históricas no usadas. |
|
|
65
|
+
|
|
66
|
+
## 4. ¿Qué se genera?
|
|
67
|
+
- `dist/output.css` → Reset, variables compartidas, helpers de spacing, helpers de layout, grid opcional y tipografías mobile/desktop.
|
|
68
|
+
- `dist/index.html` → Guía interactiva con navegación sticky, buscador y diffs visuales.
|
|
69
|
+
- `dist/themes/dutti.css` + `dist/themes/dutti-demo.html` cuando `theme.enabled` es `true` (ver [Tema Dutti](#9-tema-dutti-y-demos)).
|
|
70
|
+
|
|
71
|
+
## 5. Configurar `config.json`
|
|
72
|
+
### 5.1 Ejemplo mínimo
|
|
73
|
+
```jsonc
|
|
99
74
|
{
|
|
100
75
|
"prefix": "hg",
|
|
101
|
-
"category": "typo",
|
|
102
76
|
"baseFontSize": 16,
|
|
77
|
+
"breakpoints": { "mobile": "1px", "desktop": "992px" },
|
|
103
78
|
"fontFamilyMap": {
|
|
104
79
|
"primary": "arial, sans-serif",
|
|
105
80
|
"secondary": "\"ms-serif\", serif"
|
|
106
81
|
},
|
|
107
|
-
"
|
|
108
|
-
|
|
109
|
-
"desktop": "992px"
|
|
110
|
-
},
|
|
111
|
-
"spacingMap": {
|
|
112
|
-
"0": "0",
|
|
113
|
-
"4": "4px",
|
|
114
|
-
"8": "8px",
|
|
115
|
-
"16": "16px",
|
|
116
|
-
"24": "24px"
|
|
117
|
-
},
|
|
82
|
+
"colors": { "white": "#fff", "black": "#000" },
|
|
83
|
+
"spacingMap": { "0": "0", "16": "16px", "100-percent": "100%" },
|
|
118
84
|
"spacingImportant": ["0"],
|
|
119
|
-
"colors": {
|
|
120
|
-
"white": "#ffffff",
|
|
121
|
-
"black": "#000000",
|
|
122
|
-
"primary": "#000000",
|
|
123
|
-
"error": "#b40016"
|
|
124
|
-
},
|
|
125
85
|
"helpers": {
|
|
126
|
-
"display": {
|
|
127
|
-
"property": "display",
|
|
128
|
-
"class": "d",
|
|
129
|
-
"responsive": true,
|
|
130
|
-
"description": "Tipo de caja de renderizado",
|
|
131
|
-
"values": ["flex", "block", "none"]
|
|
132
|
-
}
|
|
86
|
+
"display": { "property": "display", "class": "d", "responsive": true, "values": ["flex", "block", "none"] }
|
|
133
87
|
},
|
|
134
|
-
"
|
|
88
|
+
"grid": { "enabled": true, "gutter": "8px", "breakpoints": { "md": { "minWidth": "992px", "columns": 12 } } },
|
|
89
|
+
"typo": {
|
|
135
90
|
"h2": {
|
|
136
91
|
"fontFamily": "arial, sans-serif",
|
|
137
92
|
"fontWeight": "900",
|
|
138
|
-
"
|
|
139
|
-
"
|
|
140
|
-
"mobile": {
|
|
141
|
-
"fontSize": "18px",
|
|
142
|
-
"lineHeight": "1.2"
|
|
143
|
-
},
|
|
144
|
-
"desktop": {
|
|
145
|
-
"fontSize": "24px",
|
|
146
|
-
"lineHeight": "1.2"
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### Propiedades Globales
|
|
154
|
-
|
|
155
|
-
| Propiedad | Tipo | Default | Descripción |
|
|
156
|
-
|-----------|------|---------|-------------|
|
|
157
|
-
| `prefix` | string | `"hg"` | Prefijo para variables CSS (ej: `--hg-typo-...`) |
|
|
158
|
-
| `category` | string | `"typo"` | Categoría para variables CSS |
|
|
159
|
-
| `baseFontSize` | number | `16` | Tamaño base para conversión px→rem |
|
|
160
|
-
| `fontFamilyMap` | object | - | Mapeo de nombres a fuentes CSS |
|
|
161
|
-
| `breakpoints` | object | **Requerido** | Breakpoints mobile/desktop |
|
|
162
|
-
| `spacingMap` | object | - | Valores de spacing para helpers (px o %) |
|
|
163
|
-
| `spacingImportant` | array | - | Valores de spacing que usan `!important` |
|
|
164
|
-
| `colors` | object | - | Paleta de colores (nombre → hex) |
|
|
165
|
-
| `helpers` | object | - | Helpers de layout (display, flexbox, etc.) |
|
|
166
|
-
| `classes` | object | **Requerido** | Clases CSS de tipografía a generar |
|
|
167
|
-
|
|
168
|
-
### Propiedades de Clases
|
|
169
|
-
|
|
170
|
-
**Base (aplicadas a todos los breakpoints):**
|
|
171
|
-
|
|
172
|
-
- `fontFamily`: Familia de fuente
|
|
173
|
-
- `fontWeight`: Peso de fuente (100, 400, 700, 900)
|
|
174
|
-
- `letterSpacing`: Espaciado entre letras (ej: "0rem")
|
|
175
|
-
- `textTransform`: Transformación (none, uppercase, lowercase)
|
|
176
|
-
|
|
177
|
-
**Responsive (por breakpoint):**
|
|
178
|
-
|
|
179
|
-
- `mobile`: `{ fontSize: "18px", lineHeight: "1.2" }`
|
|
180
|
-
- `desktop`: `{ fontSize: "24px", lineHeight: "1.5" }`
|
|
181
|
-
|
|
182
|
-
## 🎯 Helpers de Spacing
|
|
183
|
-
|
|
184
|
-
Genera clases estilo Tailwind para padding y margin con **propiedades lógicas** para soporte RTL automático:
|
|
185
|
-
|
|
186
|
-
```css
|
|
187
|
-
/* Mobile - Propiedades lógicas */
|
|
188
|
-
.p-4 { padding: var(--hg-spacing-4); }
|
|
189
|
-
.pr-4 { padding-inline-end: var(--hg-spacing-4); }
|
|
190
|
-
.pl-4 { padding-inline-start: var(--hg-spacing-4); }
|
|
191
|
-
.m-8 { margin: var(--hg-spacing-8); }
|
|
192
|
-
.mr-8 { margin-inline-end: var(--hg-spacing-8); }
|
|
193
|
-
.ml-8 { margin-inline-start: var(--hg-spacing-8); }
|
|
194
|
-
|
|
195
|
-
/* Desktop (md:) - Con media query */
|
|
196
|
-
@media (min-width: 62rem) {
|
|
197
|
-
.md\:p-4 { padding: var(--hg-spacing-4); }
|
|
198
|
-
.md\:pr-8 { padding-inline-end: var(--hg-spacing-8); }
|
|
199
|
-
}
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
> **Nota:** Las propiedades `pr`/`pl` y `mr`/`ml` usan `padding-inline-end/start` y `margin-inline-end/start` para soporte RTL automático.
|
|
203
|
-
|
|
204
|
-
## 🎨 Sistema de Colores
|
|
205
|
-
|
|
206
|
-
Define colores en `config.json` y se generan como variables CSS:
|
|
207
|
-
|
|
208
|
-
```json
|
|
209
|
-
{
|
|
210
|
-
"colors": {
|
|
211
|
-
"white": "#ffffff",
|
|
212
|
-
"black": "#000000",
|
|
213
|
-
"primary": "#000000",
|
|
214
|
-
"error": "#b40016",
|
|
215
|
-
"success": "#76ae4a"
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
**CSS generado:**
|
|
221
|
-
|
|
222
|
-
```css
|
|
223
|
-
:root {
|
|
224
|
-
--hg-color-white: #ffffff;
|
|
225
|
-
--hg-color-black: #000000;
|
|
226
|
-
--hg-color-primary: #000000;
|
|
227
|
-
--hg-color-error: #b40016;
|
|
228
|
-
--hg-color-success: #76ae4a;
|
|
229
|
-
}
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
**Uso:**
|
|
233
|
-
|
|
234
|
-
```css
|
|
235
|
-
.my-element {
|
|
236
|
-
background-color: var(--hg-color-primary);
|
|
237
|
-
color: var(--hg-color-white);
|
|
238
|
-
}
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
## 📐 Helpers de Layout
|
|
242
|
-
|
|
243
|
-
Genera helpers para display, flexbox, alignment y gap:
|
|
244
|
-
|
|
245
|
-
```json
|
|
246
|
-
{
|
|
247
|
-
"helpers": {
|
|
248
|
-
"display": {
|
|
249
|
-
"property": "display",
|
|
250
|
-
"class": "d",
|
|
251
|
-
"responsive": true,
|
|
252
|
-
"description": "Tipo de caja de renderizado",
|
|
253
|
-
"values": ["flex", "block", "none"]
|
|
254
|
-
},
|
|
255
|
-
"flex-direction": {
|
|
256
|
-
"property": "flex-direction",
|
|
257
|
-
"class": "flex",
|
|
258
|
-
"responsive": true,
|
|
259
|
-
"description": "Dirección del eje principal",
|
|
260
|
-
"values": {
|
|
261
|
-
"row": "row",
|
|
262
|
-
"column": "column"
|
|
263
|
-
}
|
|
93
|
+
"mobile": { "fontSize": "18px", "lineHeight": "1.2" },
|
|
94
|
+
"desktop": { "fontSize": "24px", "lineHeight": "1.2" }
|
|
264
95
|
}
|
|
265
96
|
}
|
|
266
97
|
}
|
|
267
98
|
```
|
|
268
99
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
.
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
7. **Tipografías (Desktop)** - Clases responsive para desktop
|
|
299
|
-
|
|
300
|
-
### `dist/index.html`
|
|
301
|
-
|
|
302
|
-
Guía HTML interactiva generada automáticamente con:
|
|
303
|
-
|
|
304
|
-
- 🎨 **Grid de colores** - Visualización de la paleta de colores con preview
|
|
305
|
-
- 🔤 **Font Families** - Tabla con preview de fuentes
|
|
306
|
-
- 📝 **Clases de Tipografía** - Tabla completa con preview y valores responsive
|
|
307
|
-
- 🔗 **Variables CSS Compartidas** - Todas las variables generadas
|
|
308
|
-
- 📏 **Helpers de Spacing** - Tabla con clases y variables
|
|
309
|
-
- 📐 **Helpers de Layout** - Tabla con clases base y responsive (`md:`)
|
|
310
|
-
- 📱 **Breakpoints** - Configuración de breakpoints
|
|
311
|
-
- 🔍 **Búsqueda en tiempo real** - Filtra y resalta contenido
|
|
312
|
-
- 🎯 **Detección de cambios** - Valores modificados se resaltan en verde
|
|
313
|
-
- 📌 **Header sticky** - Navegación siempre visible
|
|
314
|
-
- 📋 **Menú lateral** - Navegación rápida con scroll suave
|
|
315
|
-
- 📊 **Metadata** - Último commit y versión del package
|
|
316
|
-
|
|
317
|
-
## 🔍 Gestión de Variables CSS
|
|
318
|
-
|
|
319
|
-
El generador mantiene un historial de todas las variables CSS generadas en `.data/.historical-variables.json` para que nunca se eliminen automáticamente, incluso si se borran las clases que las usaban.
|
|
320
|
-
|
|
321
|
-
### Comandos Disponibles
|
|
322
|
-
|
|
100
|
+
### 5.2 Propiedades globales
|
|
101
|
+
| Campo | Tipo | Descripción |
|
|
102
|
+
| ----- | ---- | ----------- |
|
|
103
|
+
| `prefix` | string | Prefijo usado en todas las variables (`--hg-color-*`). |
|
|
104
|
+
| `baseFontSize` | number | Conversión automática px → rem (default `16`). |
|
|
105
|
+
| `breakpoints.mobile` / `.desktop` | string | Valores usados en media queries (`992px`, etc.). |
|
|
106
|
+
| `fontFamilyMap` | object | Alias legibles para las fuentes declaradas en tipografías. |
|
|
107
|
+
| `colors` | object | Paleta exportada como `--hg-color-*`. |
|
|
108
|
+
| `spacingMap` | object | Escala lógica de spacing (px o %). |
|
|
109
|
+
| `spacingImportant` | string[] | Keys de spacing con `!important`. |
|
|
110
|
+
| `helpers` | object | Helpers de layout. Permite arrays simples o mapas clave → valor. |
|
|
111
|
+
| `grid` | object | Define breakpoints, columnas y gutter por tamaño. |
|
|
112
|
+
| `typo` | object | Clases de tipografía (obligatorio al menos un breakpoint). |
|
|
113
|
+
| `theme` | object | `{ name, enabled }` para combinar temas desde `themes/<name>`. |
|
|
114
|
+
|
|
115
|
+
### 5.3 Helpers y grid
|
|
116
|
+
- `src/generators/helpers-generator.js` crea clases del tipo `.hg-d-flex`, `.md\:hg-justify-center`, `.hg-gap-16`, etc.
|
|
117
|
+
- Puedes mezclar helpers basados en `values` y helpers que reutilizan `spacingMap` con `useSpacing: true` (gap, row-gap, column-gap...).
|
|
118
|
+
- El grid (`grid.enabled=true`) genera utilidades `.row`, `.col-md-6`, offsets, contenedores fluidos y variantes por breakpoint.
|
|
119
|
+
|
|
120
|
+
### 5.4 Tipografías
|
|
121
|
+
- El generador (`src/generators/typo-generator.js`) deduplica valores y crea variables compartidas (`--hg-typo-font-size-24`).
|
|
122
|
+
- Cada clase admite propiedades base (`fontFamily`, `fontWeight`, `letterSpacing`, `textTransform`) y propiedades por breakpoint (`fontSize`, `lineHeight`).
|
|
123
|
+
- Los valores px se convierten automáticamente a rem respetando `baseFontSize`.
|
|
124
|
+
|
|
125
|
+
## 6. CLI y argumentos
|
|
126
|
+
`generate-css.js` puede ejecutarse como binario (`holygrail5`) o mediante `node generate-css.js`.
|
|
127
|
+
|
|
128
|
+
Argumentos soportados:
|
|
323
129
|
```bash
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
npm run vars:report
|
|
329
|
-
|
|
330
|
-
# Eliminar una variable específica del historial
|
|
331
|
-
npm run vars:remove -- --hg-typo-font-size-18
|
|
332
|
-
|
|
333
|
-
# Eliminar todas las variables no usadas del historial
|
|
334
|
-
npm run vars:remove-all-unused
|
|
335
|
-
|
|
336
|
-
# Mostrar todas las variables históricas almacenadas
|
|
337
|
-
npm run vars:show-all
|
|
130
|
+
npx holygrail5 \
|
|
131
|
+
--config=./config.personal.json \
|
|
132
|
+
--output=./dist/custom.css \
|
|
133
|
+
--html=./dist/guia.html
|
|
338
134
|
```
|
|
135
|
+
- Todos los parámetros son opcionales. Si omites alguno, se usan las rutas por defecto (`config.json` y `dist/*`).
|
|
136
|
+
- El script ajusta automáticamente el `href="output.css"` del HTML si CSS y HTML viven en carpetas distintas.
|
|
339
137
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
# 2. Ver qué variables no se están usando
|
|
347
|
-
npm run vars:list
|
|
348
|
-
|
|
349
|
-
# 3. Eliminar variables no usadas
|
|
350
|
-
npm run vars:remove-all-unused
|
|
138
|
+
## 7. Guía HTML interactiva
|
|
139
|
+
El módulo `src/docs-generator/html-generator.js` produce `dist/index.html` con:
|
|
140
|
+
- Resumen visual de colores, tipografías y spacing.
|
|
141
|
+
- Detección de cambios: los valores modificados respecto a `.data/.previous-values.json` se resaltan.
|
|
142
|
+
- Buscador instantáneo y navegación lateral fija.
|
|
143
|
+
- Información de metadata (versión del paquete y último commit disponible).
|
|
351
144
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
### Opciones Avanzadas
|
|
145
|
+
## 8. Gestión de variables históricas
|
|
146
|
+
El binario `src/docs-generator/variables-cli.js` + el módulo `variables-tracker` guardan un historial en `.data/.historical-variables.json` para que ninguna variable desaparezca sin que lo decidas.
|
|
357
147
|
|
|
148
|
+
Comandos útiles:
|
|
358
149
|
```bash
|
|
359
|
-
#
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
##
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
##
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
### Nombres de Variables
|
|
399
|
-
|
|
400
|
-
Patrón: `--{prefix}-{category}-{propiedad}-{valor}`
|
|
401
|
-
|
|
402
|
-
Ejemplos:
|
|
403
|
-
|
|
404
|
-
- `--hg-typo-font-family-primary`
|
|
405
|
-
- `--hg-typo-font-size-18`
|
|
406
|
-
- `--hg-spacing-4`
|
|
407
|
-
- `--hg-color-white`
|
|
408
|
-
|
|
409
|
-
### Propiedades Lógicas (RTL)
|
|
410
|
-
|
|
411
|
-
Los helpers de spacing usan propiedades lógicas para soporte RTL automático:
|
|
412
|
-
|
|
413
|
-
- `pr-4` → `padding-inline-end` (no `padding-right`)
|
|
414
|
-
- `pl-4` → `padding-inline-start` (no `padding-left`)
|
|
415
|
-
- `mr-8` → `margin-inline-end` (no `margin-right`)
|
|
416
|
-
- `ml-8` → `margin-inline-start` (no `margin-left`)
|
|
417
|
-
|
|
418
|
-
## 🎨 Ejemplo de CSS Generado
|
|
419
|
-
|
|
420
|
-
```css
|
|
421
|
-
/* Reset CSS Mínimo */
|
|
422
|
-
html {
|
|
423
|
-
box-sizing: border-box;
|
|
424
|
-
font-size: 16px;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
/* Variables CSS Compartidas */
|
|
428
|
-
:root {
|
|
429
|
-
--hg-typo-font-family-primary: arial, sans-serif;
|
|
430
|
-
--hg-typo-font-size-18: 1.125rem;
|
|
431
|
-
--hg-typo-font-size-24: 1.5rem;
|
|
432
|
-
--hg-typo-line-height-1-2: 1.2;
|
|
433
|
-
--hg-spacing-4: 0.25rem;
|
|
434
|
-
--hg-spacing-8: 0.5rem;
|
|
435
|
-
--hg-color-white: #ffffff;
|
|
436
|
-
--hg-color-primary: #000000;
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
/* Helpers de Spacing - Mobile */
|
|
440
|
-
.p-4 { padding: var(--hg-spacing-4); }
|
|
441
|
-
.pr-4 { padding-inline-end: var(--hg-spacing-4); }
|
|
442
|
-
.pl-4 { padding-inline-start: var(--hg-spacing-4); }
|
|
443
|
-
.m-8 { margin: var(--hg-spacing-8); }
|
|
444
|
-
|
|
445
|
-
/* Helpers de Spacing - Desktop (md:) */
|
|
446
|
-
@media (min-width: 62rem) {
|
|
447
|
-
.md\:p-4 { padding: var(--hg-spacing-4); }
|
|
448
|
-
.md\:pr-8 { padding-inline-end: var(--hg-spacing-8); }
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
/* Layout Helpers */
|
|
452
|
-
.hg-d-flex { display: flex; }
|
|
453
|
-
.hg-flex-row { flex-direction: row; }
|
|
454
|
-
.hg-justify-center { justify-content: center; }
|
|
455
|
-
.hg-items-center { align-items: center; }
|
|
456
|
-
.hg-gap-16 { gap: 1rem; }
|
|
457
|
-
|
|
458
|
-
@media (min-width: 992px) {
|
|
459
|
-
.md\:hg-d-flex { display: flex; }
|
|
460
|
-
.md\:hg-flex-row { flex-direction: row; }
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
/* Tipografías - Mobile */
|
|
464
|
-
@media (min-width: 0rem) {
|
|
465
|
-
.h2 {
|
|
466
|
-
font-family: var(--hg-typo-font-family-primary);
|
|
467
|
-
font-size: var(--hg-typo-font-size-18);
|
|
468
|
-
line-height: var(--hg-typo-line-height-1-2);
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
/* Tipografías - Desktop */
|
|
473
|
-
@media (min-width: 62rem) {
|
|
474
|
-
.h2 {
|
|
475
|
-
font-size: var(--hg-typo-font-size-24);
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
## 🏗️ Estructura del Proyecto
|
|
481
|
-
|
|
482
|
-
```
|
|
483
|
-
holygrail5/
|
|
484
|
-
├── generator.js # Orquestador principal
|
|
485
|
-
├── config.json # Configuración del proyecto
|
|
486
|
-
├── package.json # Dependencias y scripts
|
|
487
|
-
├── README.md # Este archivo
|
|
488
|
-
├── .data/ # Archivos de estado (gitignored)
|
|
489
|
-
│ ├── .previous-values.json # Valores previos para detección de cambios
|
|
490
|
-
│ └── .historical-variables.json # Historial de variables CSS
|
|
491
|
-
├── dist/ # Archivos generados (gitignored)
|
|
492
|
-
│ ├── output.css # CSS generado
|
|
493
|
-
│ └── index.html # Guía HTML interactiva
|
|
494
|
-
├── src/
|
|
495
|
-
│ ├── config.js # Carga y validación de configuración
|
|
496
|
-
│ ├── parser.js # Generación de CSS desde JSON
|
|
497
|
-
│ ├── guide.js # Generación de guía HTML interactiva
|
|
498
|
-
│ ├── utils.js # Utilidades compartidas (px→rem, etc.)
|
|
499
|
-
│ ├── variables-manager.js # Gestión de variables CSS históricas
|
|
500
|
-
│ ├── cli-variables.js # CLI para gestión de variables
|
|
501
|
-
│ ├── watch.js # Modo watch para desarrollo
|
|
502
|
-
│ └── dev.js # Script de desarrollo (watch + servidor)
|
|
503
|
-
└── tests/
|
|
504
|
-
├── run-all.js # Ejecutor de todos los tests
|
|
505
|
-
├── config.test.js # Tests de configuración
|
|
506
|
-
├── parser.test.js # Tests del parseador
|
|
507
|
-
├── guide.test.js # Tests de la guía HTML
|
|
508
|
-
└── utils.test.js # Tests de utilidades
|
|
509
|
-
```
|
|
510
|
-
|
|
511
|
-
## 🐛 Solución de Problemas
|
|
512
|
-
|
|
513
|
-
**Error: "Archivo de configuración no encontrado"**
|
|
514
|
-
|
|
515
|
-
```bash
|
|
516
|
-
npx holygrail5 --config=./ruta/config.json
|
|
517
|
-
```
|
|
518
|
-
|
|
519
|
-
**Error: "La configuración debe tener un objeto 'classes'"**
|
|
520
|
-
|
|
521
|
-
Verifica que `config.json` tenga la propiedad `classes` con al menos una clase.
|
|
522
|
-
|
|
523
|
-
**Error: "La clase debe tener al menos un breakpoint"**
|
|
524
|
-
|
|
525
|
-
Cada clase debe tener al menos `mobile` o `desktop`.
|
|
526
|
-
|
|
527
|
-
**El servidor no muestra los cambios**
|
|
528
|
-
|
|
529
|
-
- Recarga con `Cmd+Shift+R` (Mac) o `Ctrl+Shift+R` (Windows/Linux)
|
|
530
|
-
- Verifica que el modo watch esté activo si usas `npm run dev`
|
|
531
|
-
|
|
532
|
-
**Variables no se detectan como no usadas**
|
|
533
|
-
|
|
534
|
-
Ejecuta `npm run generate` primero para actualizar el historial de variables.
|
|
535
|
-
|
|
536
|
-
## 🌐 GitHub Pages
|
|
537
|
-
|
|
538
|
-
Para desplegar en GitHub Pages, puedes:
|
|
539
|
-
|
|
540
|
-
1. Configurar GitHub Pages para usar la carpeta `dist/` como fuente
|
|
541
|
-
2. O crear un workflow de GitHub Actions que genere los archivos en `docs/` automáticamente
|
|
542
|
-
|
|
543
|
-
**Opción 1 - Usar dist/ directamente:**
|
|
544
|
-
|
|
545
|
-
- En Settings → Pages, selecciona la rama y carpeta `dist/`
|
|
546
|
-
|
|
547
|
-
**Opción 2 - Workflow automático:**
|
|
548
|
-
|
|
549
|
-
- Crea `.github/workflows/deploy.yml` que ejecute `npm run generate` y copie archivos a `docs/`
|
|
550
|
-
|
|
551
|
-
## 📚 Recursos
|
|
552
|
-
|
|
553
|
-
- **Repositorio**: [GitHub](https://github.com/holygrailcss/holygrail5.git)
|
|
554
|
-
- **npm**: [holygrail5](https://www.npmjs.com/package/holygrail5)
|
|
555
|
-
- **Licencia**: MIT
|
|
556
|
-
- **Node.js**: Requiere >=12.0.0
|
|
557
|
-
|
|
558
|
-
## 🤝 Contribuir
|
|
559
|
-
|
|
560
|
-
1. Fork el repositorio
|
|
561
|
-
2. Crea una rama (`git checkout -b feature/AmazingFeature`)
|
|
562
|
-
3. Commit tus cambios (`git commit -m 'Add AmazingFeature'`)
|
|
563
|
-
4. Push a la rama (`git push origin feature/AmazingFeature`)
|
|
564
|
-
5. Abre un Pull Request
|
|
565
|
-
|
|
566
|
-
## 📝 Changelog
|
|
567
|
-
|
|
568
|
-
### v1.0.2
|
|
569
|
-
|
|
570
|
-
- ✅ Sistema de colores con variables CSS
|
|
571
|
-
- ✅ Helpers de layout (display, flexbox, alignment, gap)
|
|
572
|
-
- ✅ Propiedades lógicas para soporte RTL
|
|
573
|
-
- ✅ Guía HTML mejorada con grid de colores
|
|
574
|
-
- ✅ Búsqueda interactiva en la guía
|
|
575
|
-
- ✅ Header sticky y menú lateral
|
|
576
|
-
- ✅ Reorganización del proyecto (`.data/` para archivos de estado)
|
|
577
|
-
- ✅ Archivos generados en `dist/`
|
|
578
|
-
|
|
579
|
-
---
|
|
580
|
-
|
|
581
|
-
## 🚀 ¿Por qué HolyGrail5? Evolución desde HolyGrail CSS (SASS)
|
|
582
|
-
|
|
583
|
-
### El Problema con SASS
|
|
584
|
-
|
|
585
|
-
HolyGrail CSS original se basaba en **SASS/SCSS**, lo que presentaba varios desafíos:
|
|
586
|
-
|
|
587
|
-
#### Limitaciones de SASS
|
|
588
|
-
|
|
589
|
-
1. **Dependencia de compilación**: Requiere herramientas de build (Gulp, Webpack, etc.) y procesos de compilación
|
|
590
|
-
2. **Curva de aprendizaje**: Necesitas conocer SASS/SCSS para personalizar
|
|
591
|
-
3. **Configuración compleja**: Variables SASS dispersas en múltiples archivos
|
|
592
|
-
4. **Sin documentación automática**: No genera guías visuales de las clases disponibles
|
|
593
|
-
5. **Mantenimiento manual**: Cambios en variables requieren editar código SASS directamente
|
|
594
|
-
6. **Sin historial**: No hay gestión automática de variables no usadas
|
|
595
|
-
7. **Menos portable**: Depende del ecosistema SASS y sus herramientas
|
|
596
|
-
|
|
597
|
-
### La Solución: HolyGrail5
|
|
598
|
-
|
|
599
|
-
HolyGrail5 nace de la necesidad de **simplificar, modernizar y potenciar** el framework original.
|
|
600
|
-
|
|
601
|
-
#### Ventajas Clave de HolyGrail5
|
|
602
|
-
|
|
603
|
-
##### 1. **Configuración Declarativa con JSON**
|
|
604
|
-
|
|
605
|
-
**Antes (SASS):**
|
|
606
|
-
```scss
|
|
607
|
-
// Variables dispersas en múltiples archivos
|
|
608
|
-
$font-size-mobile: 18px;
|
|
609
|
-
$font-size-desktop: 24px;
|
|
610
|
-
$spacing-16: 16px;
|
|
611
|
-
// ... más variables en diferentes archivos
|
|
612
|
-
```
|
|
613
|
-
|
|
614
|
-
**Ahora (JSON):**
|
|
615
|
-
```json
|
|
616
|
-
{
|
|
617
|
-
"classes": {
|
|
618
|
-
"h2": {
|
|
619
|
-
"mobile": { "fontSize": "18px" },
|
|
620
|
-
"desktop": { "fontSize": "24px" }
|
|
621
|
-
}
|
|
622
|
-
},
|
|
623
|
-
"spacingMap": { "16": "16px" }
|
|
624
|
-
}
|
|
625
|
-
```
|
|
626
|
-
|
|
627
|
-
✅ **Ventaja**: Todo en un solo archivo, fácil de entender y modificar
|
|
628
|
-
|
|
629
|
-
##### 2. **Sin Dependencias de Build Complejas**
|
|
630
|
-
|
|
631
|
-
**Antes (SASS):**
|
|
632
|
-
- Requiere Gulp/Webpack/Grunt
|
|
633
|
-
- Configuración de compilación
|
|
634
|
-
- Dependencias de Node.js específicas
|
|
635
|
-
- Procesos de build complejos
|
|
636
|
-
|
|
637
|
-
**Ahora (HolyGrail5):**
|
|
638
|
-
```bash
|
|
639
|
-
npm run generate
|
|
640
|
-
# ¡Listo! CSS generado
|
|
641
|
-
```
|
|
642
|
-
|
|
643
|
-
✅ **Ventaja**: Un solo comando, sin configuración de build
|
|
644
|
-
|
|
645
|
-
##### 3. **Guía Interactiva Automática**
|
|
646
|
-
|
|
647
|
-
**Antes (SASS):**
|
|
648
|
-
- Documentación manual
|
|
649
|
-
- Sin preview visual
|
|
650
|
-
- Difícil saber qué clases están disponibles
|
|
651
|
-
|
|
652
|
-
**Ahora (HolyGrail5):**
|
|
653
|
-
- Guía HTML generada automáticamente
|
|
654
|
-
- Preview visual de todas las clases
|
|
655
|
-
- Búsqueda en tiempo real
|
|
656
|
-
- Detección de cambios
|
|
657
|
-
|
|
658
|
-
✅ **Ventaja**: Documentación siempre actualizada y visual
|
|
659
|
-
|
|
660
|
-
##### 4. **Gestión Inteligente de Variables**
|
|
661
|
-
|
|
662
|
-
**Antes (SASS):**
|
|
663
|
-
- Variables se eliminan si no se usan
|
|
664
|
-
- Puede romper CSS personalizado
|
|
665
|
-
- Sin historial
|
|
666
|
-
|
|
667
|
-
**Ahora (HolyGrail5):**
|
|
668
|
-
- Historial persistente de variables
|
|
669
|
-
- Nunca se eliminan automáticamente
|
|
670
|
-
- Comandos para gestionar variables no usadas
|
|
671
|
-
- Protege tu CSS personalizado
|
|
672
|
-
|
|
673
|
-
✅ **Ventaja**: Seguridad y control total sobre las variables
|
|
674
|
-
|
|
675
|
-
##### 5. **Variables CSS Nativas (No SASS)**
|
|
676
|
-
|
|
677
|
-
**Antes (SASS):**
|
|
678
|
-
```scss
|
|
679
|
-
// Variables SASS (solo en compilación)
|
|
680
|
-
$primary-color: #000000;
|
|
681
|
-
.my-class {
|
|
682
|
-
color: $primary-color; // Compilado a CSS estático
|
|
683
|
-
}
|
|
684
|
-
```
|
|
685
|
-
|
|
686
|
-
**Ahora (HolyGrail5):**
|
|
687
|
-
```css
|
|
688
|
-
/* Variables CSS nativas (runtime) */
|
|
689
|
-
:root {
|
|
690
|
-
--hg-color-primary: #000000;
|
|
691
|
-
}
|
|
692
|
-
.my-class {
|
|
693
|
-
color: var(--hg-color-primary); // Cambiable en runtime
|
|
694
|
-
}
|
|
695
|
-
```
|
|
696
|
-
|
|
697
|
-
✅ **Ventaja**: Variables CSS nativas, modificables en runtime, mejor rendimiento
|
|
698
|
-
|
|
699
|
-
##### 6. **Optimización Automática**
|
|
700
|
-
|
|
701
|
-
**Antes (SASS):**
|
|
702
|
-
- Duplicación de valores en múltiples lugares
|
|
703
|
-
- CSS más pesado
|
|
704
|
-
- Sin deduplicación automática
|
|
705
|
-
|
|
706
|
-
**Ahora (HolyGrail5):**
|
|
707
|
-
- Variables compartidas automáticamente
|
|
708
|
-
- Un valor único → una variable CSS
|
|
709
|
-
- CSS más pequeño y eficiente
|
|
710
|
-
|
|
711
|
-
✅ **Ventaja**: CSS optimizado automáticamente, menos código
|
|
712
|
-
|
|
713
|
-
##### 7. **Modo Watch Integrado**
|
|
714
|
-
|
|
715
|
-
**Antes (SASS):**
|
|
716
|
-
- Requiere configurar watch en Gulp/Webpack
|
|
717
|
-
- Configuración adicional necesaria
|
|
718
|
-
|
|
719
|
-
**Ahora (HolyGrail5):**
|
|
720
|
-
```bash
|
|
721
|
-
npm run watch
|
|
722
|
-
# Regenera automáticamente al cambiar config.json
|
|
723
|
-
```
|
|
724
|
-
|
|
725
|
-
✅ **Ventaja**: Watch listo para usar, sin configuración
|
|
726
|
-
|
|
727
|
-
##### 8. **Portabilidad y Simplicidad**
|
|
728
|
-
|
|
729
|
-
**Antes (SASS):**
|
|
730
|
-
- Múltiples archivos SASS
|
|
731
|
-
- Estructura compleja
|
|
732
|
-
- Dependencias de herramientas de build
|
|
733
|
-
|
|
734
|
-
**Ahora (HolyGrail5):**
|
|
735
|
-
- Un solo archivo JSON de configuración
|
|
736
|
-
- Estructura simple y clara
|
|
737
|
-
- Solo Node.js (sin SASS, Gulp, etc.)
|
|
738
|
-
|
|
739
|
-
✅ **Ventaja**: Más fácil de entender, mantener y compartir
|
|
740
|
-
|
|
741
|
-
##### 9. **Mejor para Equipos**
|
|
742
|
-
|
|
743
|
-
**Antes (SASS):**
|
|
744
|
-
- Solo desarrolladores que conocen SASS pueden modificar
|
|
745
|
-
- Cambios requieren conocimiento técnico
|
|
746
|
-
|
|
747
|
-
**Ahora (HolyGrail5):**
|
|
748
|
-
- Cualquiera puede editar JSON
|
|
749
|
-
- Cambios visibles inmediatamente
|
|
750
|
-
- Menos barrera de entrada
|
|
751
|
-
|
|
752
|
-
✅ **Ventaja**: Colaboración más fácil, menos dependencia de desarrolladores
|
|
753
|
-
|
|
754
|
-
##### 10. **Ecosistema Moderno**
|
|
755
|
-
|
|
756
|
-
**Antes (SASS):**
|
|
757
|
-
- Tecnología más antigua
|
|
758
|
-
- Menos integración con herramientas modernas
|
|
759
|
-
- Ecosistema SASS en declive
|
|
760
|
-
|
|
761
|
-
**Ahora (HolyGrail5):**
|
|
762
|
-
- Tecnología moderna (Node.js, JSON, CSS Variables)
|
|
763
|
-
- Mejor integración con herramientas actuales
|
|
764
|
-
- Alineado con estándares web modernos
|
|
765
|
-
|
|
766
|
-
✅ **Ventaja**: Framework preparado para el futuro
|
|
767
|
-
|
|
768
|
-
##### 11. **Separación de Componentes y Flexibilidad**
|
|
769
|
-
|
|
770
|
-
**Antes (HolyGrail CSS con Angular):**
|
|
771
|
-
- Framework acoplado a Angular
|
|
772
|
-
- Componentes incluidos (botones, cards, etc.) que aumentaban el peso
|
|
773
|
-
- CSS pesado con estilos de componentes que no siempre se usaban
|
|
774
|
-
- Difícil integrar otras librerías de componentes
|
|
775
|
-
- Dependencia de Angular y sus componentes
|
|
776
|
-
|
|
777
|
-
**Ahora (HolyGrail5):**
|
|
778
|
-
- **Solo CSS puro**: Sin dependencias de frameworks
|
|
779
|
-
- **Sin componentes incluidos**: Solo clases de utilidad y layout
|
|
780
|
-
- **CSS ligero**: Solo lo esencial (tipografía, spacing, layout, grid)
|
|
781
|
-
- **Integración flexible**: Puedes usar cualquier librería de componentes
|
|
782
|
-
- **Compatible con MDS de Inditex**: Diseñado para trabajar junto con sistemas de componentes externos
|
|
783
|
-
|
|
784
|
-
✅ **Ventaja**: Framework ligero, flexible y compatible con cualquier librería de componentes
|
|
785
|
-
|
|
786
|
-
##### 12. **Maquetación con IA**
|
|
787
|
-
|
|
788
|
-
**Antes (SASS + Angular):**
|
|
789
|
-
- Estructura compleja difícil de entender para IA
|
|
790
|
-
- Código SASS disperso
|
|
791
|
-
- Componentes acoplados
|
|
792
|
-
- Difícil generar código automáticamente
|
|
793
|
-
|
|
794
|
-
**Ahora (HolyGrail5):**
|
|
795
|
-
- **Configuración JSON clara**: Fácil de entender y generar por IA
|
|
796
|
-
- **Clases semánticas**: Nomenclatura clara y predecible
|
|
797
|
-
- **Superprompt disponible**: Guía completa para que IA genere código correcto
|
|
798
|
-
- **Estructura simple**: Patrones claros y repetibles
|
|
799
|
-
|
|
800
|
-
✅ **Ventaja**: Perfecto para maquetación asistida por IA, generación automática de código
|
|
801
|
-
|
|
802
|
-
### Separación de Responsabilidades
|
|
803
|
-
|
|
804
|
-
HolyGrail5 adopta una **filosofía de separación de responsabilidades**:
|
|
805
|
-
|
|
806
|
-
#### Lo que INCLUYE HolyGrail5:
|
|
807
|
-
- ✅ Sistema de tipografía
|
|
808
|
-
- ✅ Helpers de spacing (padding, margin)
|
|
809
|
-
- ✅ Helpers de layout (flexbox, grid)
|
|
810
|
-
- ✅ Sistema de grid responsive
|
|
811
|
-
- ✅ Variables CSS para colores
|
|
812
|
-
- ✅ Reset CSS mínimo
|
|
813
|
-
|
|
814
|
-
#### Lo que NO incluye (y por qué es mejor):
|
|
815
|
-
- ❌ Componentes UI (botones, cards, modales, etc.)
|
|
816
|
-
- ❌ Estilos de formularios
|
|
817
|
-
- ❌ Estilos de navegación
|
|
818
|
-
- ❌ Estilos específicos de Angular/React/Vue
|
|
819
|
-
|
|
820
|
-
**Razón**: Esto permite:
|
|
821
|
-
1. **Usar MDS de Inditex** u otras librerías de componentes sin conflictos
|
|
822
|
-
2. **CSS más ligero**: Solo lo esencial
|
|
823
|
-
3. **Flexibilidad total**: Eliges tus propios componentes
|
|
824
|
-
4. **Mejor mantenimiento**: Cada cosa en su lugar
|
|
825
|
-
|
|
826
|
-
### Integración con MDS de Inditex
|
|
827
|
-
|
|
828
|
-
HolyGrail5 está diseñado para trabajar **perfectamente** junto con MDS (Massimo Dutti System) de Inditex:
|
|
829
|
-
|
|
830
|
-
```html
|
|
831
|
-
<!-- Usa HolyGrail5 para layout y spacing -->
|
|
832
|
-
<div class="row">
|
|
833
|
-
<div class="col-xs-12 col-md-6">
|
|
834
|
-
<!-- Usa componentes MDS para UI -->
|
|
835
|
-
<mds-button variant="primary">Botón MDS</mds-button>
|
|
836
|
-
</div>
|
|
837
|
-
</div>
|
|
838
|
-
```
|
|
839
|
-
|
|
840
|
-
**Ventajas de esta combinación:**
|
|
841
|
-
- ✅ HolyGrail5 maneja el layout y estructura
|
|
842
|
-
- ✅ MDS proporciona los componentes UI
|
|
843
|
-
- ✅ Sin conflictos de estilos
|
|
844
|
-
- ✅ Mejor de ambos mundos
|
|
845
|
-
|
|
846
|
-
### Maquetación con IA
|
|
847
|
-
|
|
848
|
-
HolyGrail5 es **ideal para maquetación asistida por IA** gracias a:
|
|
849
|
-
|
|
850
|
-
1. **Superprompt disponible**: Guía completa (`SUPERPROMPT.md`) que permite a la IA entender el sistema
|
|
851
|
-
2. **Nomenclatura clara**: Clases predecibles y semánticas
|
|
852
|
-
3. **Patrones simples**: Estructura fácil de seguir
|
|
853
|
-
4. **Configuración JSON**: Fácil de generar y modificar automáticamente
|
|
854
|
-
|
|
855
|
-
**Ejemplo de uso con IA:**
|
|
856
|
-
```
|
|
857
|
-
Prompt: "Crea una página de restaurante con header, hero, menú de platos y footer usando HolyGrail5"
|
|
858
|
-
|
|
859
|
-
La IA puede:
|
|
860
|
-
- Consultar SUPERPROMPT.md para entender las clases
|
|
861
|
-
- Generar HTML con las clases correctas
|
|
862
|
-
- Usar el grid system apropiado
|
|
863
|
-
- Aplicar spacing y layout helpers correctamente
|
|
864
|
-
```
|
|
865
|
-
|
|
866
|
-
✅ **Ventaja**: Acelera el desarrollo con generación automática de código
|
|
867
|
-
|
|
868
|
-
### Comparación Directa
|
|
869
|
-
|
|
870
|
-
| Característica | HolyGrail CSS (SASS) | HolyGrail5 | ¿Por qué HolyGrail5 es mejor? |
|
|
871
|
-
|----------------|----------------------|------------|------------------------------|
|
|
872
|
-
| **Configuración** | Múltiples archivos SASS dispersos | Un solo archivo JSON (`config.json`) | ✅ **Simplicidad**: Todo en un lugar, fácil de entender y modificar |
|
|
873
|
-
| **Compilación** | Requiere Gulp/Webpack y configuración compleja | `npm run generate` (comando simple) | ✅ **Sin complejidad**: No necesitas configurar build tools |
|
|
874
|
-
| **Variables** | Variables SASS (compiladas, estáticas) | Variables CSS nativas (runtime, dinámicas) | ✅ **Flexibilidad**: Puedes cambiar valores en runtime con JavaScript |
|
|
875
|
-
| **Documentación** | Manual, requiere mantenimiento | Automática (HTML interactivo generado) | ✅ **Siempre actualizada**: Se genera automáticamente desde la configuración |
|
|
876
|
-
| **Gestión de variables** | Manual, propenso a errores | Automática con historial y herramientas CLI | ✅ **Seguridad**: Herramientas para detectar y eliminar variables no usadas |
|
|
877
|
-
| **Curva de aprendizaje** | Media-Alta (requiere conocer SASS) | Baja (solo JSON, fácil de entender) | ✅ **Accesibilidad**: Cualquiera puede editar sin conocimientos técnicos avanzados |
|
|
878
|
-
| **Portabilidad** | Media (depende de SASS y build tools) | Alta (solo Node.js, sin dependencias complejas) | ✅ **Fácil de mover**: Menos dependencias, más portable |
|
|
879
|
-
| **Optimización** | Manual (debes optimizar tú mismo) | Automática (elimina código no usado) | ✅ **Rendimiento**: CSS más pequeño automáticamente |
|
|
880
|
-
| **Watch mode** | Requiere configuración en Gulp/Webpack | Integrado (`npm run watch`) | ✅ **Desarrollo rápido**: Watch mode listo para usar |
|
|
881
|
-
| **Accesibilidad** | Solo desarrolladores con conocimientos SASS | Cualquiera puede editar (diseñadores, PMs, etc.) | ✅ **Colaboración**: Más personas pueden contribuir |
|
|
882
|
-
| **Componentes** | Incluidos (botones, cards, modales, etc.) | Separados (solo utilidades) | ✅ **Ligereza**: No incluye código que no uses |
|
|
883
|
-
| **Peso CSS** | Pesado (cientos de clases de componentes) | Ligero (solo utilidades esenciales) | ✅ **Rendimiento**: CSS más pequeño = páginas más rápidas |
|
|
884
|
-
| **Integración** | Acoplado a Angular | Compatible con cualquier librería | ✅ **Flexibilidad**: Puedes usar MDS, Material, Bootstrap, etc. |
|
|
885
|
-
| **Maquetación IA** | Difícil (estructura compleja) | Optimizado (JSON claro, superprompt) | ✅ **Futuro**: Perfecto para generación automática de código |
|
|
886
|
-
|
|
887
|
-
### Casos de Uso Ideales para HolyGrail5
|
|
888
|
-
|
|
889
|
-
✅ **Perfecto para:**
|
|
890
|
-
- Proyectos que buscan simplicidad
|
|
891
|
-
- Equipos con diferentes niveles técnicos
|
|
892
|
-
- Proyectos que necesitan documentación automática
|
|
893
|
-
- Aplicaciones que requieren variables CSS en runtime
|
|
894
|
-
- Proyectos que quieren evitar dependencias de build complejas
|
|
895
|
-
- Design systems que necesitan mantenimiento fácil
|
|
896
|
-
- **Proyectos que usan MDS de Inditex u otras librerías de componentes**
|
|
897
|
-
- **Maquetación asistida por IA**
|
|
898
|
-
- **Proyectos que necesitan CSS ligero sin componentes incluidos**
|
|
899
|
-
|
|
900
|
-
### Migración desde HolyGrail CSS (SASS)
|
|
901
|
-
|
|
902
|
-
Si vienes de HolyGrail CSS (SASS), la migración es sencilla:
|
|
903
|
-
|
|
904
|
-
1. **Extrae tus variables SASS** → Conviértelas a `config.json`
|
|
905
|
-
2. **Mantén tus clases HTML** → Son compatibles
|
|
906
|
-
3. **Regenera el CSS** → `npm run generate`
|
|
907
|
-
4. **Disfruta de las nuevas características** → Guía interactiva, watch mode, etc.
|
|
908
|
-
|
|
909
|
-
### Arquitectura Ligera y Flexible
|
|
910
|
-
|
|
911
|
-
#### El Problema del Framework Anterior
|
|
912
|
-
|
|
913
|
-
El framework original (HolyGrail CSS) incluía:
|
|
914
|
-
- **Componentes de Angular**: Botones, cards, modales, etc.
|
|
915
|
-
- **CSS pesado**: Estilos de componentes que no siempre se necesitaban
|
|
916
|
-
- **Acoplamiento**: Dependencia de Angular y sus componentes
|
|
917
|
-
- **Poco flexible**: Difícil usar otras librerías de componentes
|
|
918
|
-
|
|
919
|
-
**Ejemplos de clases incluidas en el framework antiguo (que aumentaban el peso):**
|
|
920
|
-
```css
|
|
921
|
-
/* Formularios acoplados a Angular */
|
|
922
|
-
.form-input-label-2
|
|
923
|
-
.form-input-label-2.has-ico-pre
|
|
924
|
-
.form-input-label-2.has-ico-post
|
|
925
|
-
.validation-error-messages
|
|
926
|
-
|
|
927
|
-
/* Botones y links específicos */
|
|
928
|
-
.btn
|
|
929
|
-
.link-line
|
|
930
|
-
.link-svg-pre
|
|
931
|
-
.link-svg-post
|
|
932
|
-
|
|
933
|
-
/* Componentes de navegación */
|
|
934
|
-
.header-account-back
|
|
935
|
-
.mn-mainmenu
|
|
936
|
-
.mn-mainbar
|
|
937
|
-
.tabs-mini
|
|
938
|
-
|
|
939
|
-
/* Componentes UI */
|
|
940
|
-
.tooltip-sm
|
|
941
|
-
.toast
|
|
942
|
-
.md-accordion
|
|
943
|
-
.md-toggle
|
|
944
|
-
.bottom-sheet
|
|
945
|
-
.tag-product
|
|
946
|
-
.list-state
|
|
947
|
-
|
|
948
|
-
/* Soporte RTL específico */
|
|
949
|
-
.is-rtl .form-input-label-2
|
|
950
|
-
.is-rtl .btn
|
|
951
|
-
.is-rtl .tooltip-sm
|
|
952
|
-
/* ... y cientos más */
|
|
953
|
-
```
|
|
954
|
-
|
|
955
|
-
**Problema**: Estas clases ocupaban espacio en el CSS final aunque no se usaran, y creaban conflictos al intentar usar otras librerías de componentes como MDS.
|
|
956
|
-
|
|
957
|
-
#### La Solución: Separación de Responsabilidades
|
|
958
|
-
|
|
959
|
-
HolyGrail5 adopta el principio de **"hacer una cosa y hacerla bien"**:
|
|
960
|
-
|
|
961
|
-
**HolyGrail5 se enfoca en:**
|
|
962
|
-
- Layout y estructura (grid, flexbox)
|
|
963
|
-
- Spacing y tipografía
|
|
964
|
-
- Variables CSS compartidas
|
|
965
|
-
- Helpers de utilidad
|
|
966
|
-
|
|
967
|
-
**NO incluye:**
|
|
968
|
-
- Componentes UI (botones, cards, etc.)
|
|
969
|
-
- Estilos de formularios
|
|
970
|
-
- Estilos específicos de frameworks
|
|
971
|
-
|
|
972
|
-
**Resultado:**
|
|
973
|
-
- ✅ CSS más ligero (solo lo esencial)
|
|
974
|
-
- ✅ Compatible con MDS de Inditex
|
|
975
|
-
- ✅ Compatible con cualquier librería de componentes
|
|
976
|
-
- ✅ Flexibilidad total para elegir tus componentes
|
|
977
|
-
|
|
978
|
-
### Integración con MDS de Inditex
|
|
979
|
-
|
|
980
|
-
HolyGrail5 está diseñado específicamente para trabajar junto con **MDS (Massimo Dutti System)** de Inditex:
|
|
981
|
-
|
|
982
|
-
```html
|
|
983
|
-
<!-- Layout con HolyGrail5 -->
|
|
984
|
-
<div class="row">
|
|
985
|
-
<div class="col-xs-12 col-md-6 p-16">
|
|
986
|
-
<!-- Componentes de MDS -->
|
|
987
|
-
<mds-button variant="primary">Reservar Mesa</mds-button>
|
|
988
|
-
<mds-card>
|
|
989
|
-
<mds-card-header>Título</mds-card-header>
|
|
990
|
-
<mds-card-content>Contenido</mds-card-content>
|
|
991
|
-
</mds-card>
|
|
992
|
-
</div>
|
|
993
|
-
</div>
|
|
994
|
-
```
|
|
995
|
-
|
|
996
|
-
**Ventajas:**
|
|
997
|
-
- ✅ Sin conflictos de estilos
|
|
998
|
-
- ✅ HolyGrail5 maneja layout, MDS maneja componentes
|
|
999
|
-
- ✅ Mejor de ambos mundos
|
|
1000
|
-
- ✅ CSS optimizado y ligero
|
|
1001
|
-
|
|
1002
|
-
### Maquetación con IA
|
|
1003
|
-
|
|
1004
|
-
HolyGrail5 es **perfecto para maquetación asistida por IA**:
|
|
1005
|
-
|
|
1006
|
-
#### ¿Por qué funciona tan bien con IA?
|
|
1007
|
-
|
|
1008
|
-
1. **Superprompt disponible**: `SUPERPROMPT.md` contiene toda la información necesaria
|
|
1009
|
-
2. **Nomenclatura clara**: Clases predecibles y semánticas
|
|
1010
|
-
3. **Patrones simples**: Estructura fácil de seguir
|
|
1011
|
-
4. **Configuración JSON**: Fácil de generar automáticamente
|
|
1012
|
-
5. **Sin complejidad**: No hay componentes acoplados que confundan a la IA
|
|
1013
|
-
|
|
1014
|
-
#### Ejemplo de Uso con IA
|
|
1015
|
-
|
|
1016
|
-
```
|
|
1017
|
-
Prompt para IA:
|
|
1018
|
-
"Crea una página de restaurante con header sticky, hero section,
|
|
1019
|
-
grid de 6 platos destacados, sección sobre nosotros y footer,
|
|
1020
|
-
usando HolyGrail5 según SUPERPROMPT.md"
|
|
1021
|
-
|
|
1022
|
-
La IA puede:
|
|
1023
|
-
✅ Generar HTML con las clases correctas
|
|
1024
|
-
✅ Usar el grid system apropiado
|
|
1025
|
-
✅ Aplicar spacing helpers correctamente
|
|
1026
|
-
✅ Crear layouts responsive
|
|
1027
|
-
✅ Integrar con componentes MDS si es necesario
|
|
1028
|
-
```
|
|
1029
|
-
|
|
1030
|
-
**Resultado**: Desarrollo más rápido y código consistente generado automáticamente.
|
|
1031
|
-
|
|
1032
|
-
### Conclusión
|
|
1033
|
-
|
|
1034
|
-
HolyGrail5 representa la **evolución natural** del framework original, eliminando las complejidades de SASS, separando los componentes pesados de Angular, y aprovechando las capacidades modernas de CSS y JavaScript.
|
|
1035
|
-
|
|
1036
|
-
**Es más simple, más ligero, más potente y más accesible**, manteniendo la filosofía de diseño que hizo grande a HolyGrail CSS, pero adaptado a las necesidades actuales:
|
|
1037
|
-
|
|
1038
|
-
- ✅ **Sin dependencias pesadas**: No incluye componentes Angular
|
|
1039
|
-
- ✅ **CSS ligero**: Solo utilidades esenciales
|
|
1040
|
-
- ✅ **Flexible**: Compatible con MDS de Inditex y cualquier librería
|
|
1041
|
-
- ✅ **IA-friendly**: Optimizado para maquetación asistida por IA
|
|
1042
|
-
- ✅ **Moderno**: Variables CSS nativas, JSON, Node.js
|
|
1043
|
-
|
|
1044
|
-
**En resumen**: HolyGrail5 es HolyGrail CSS **mejorado, simplificado, modernizado y optimizado** para el desarrollo web actual, con especial atención a la flexibilidad, ligereza y compatibilidad con sistemas de componentes externos.
|
|
1045
|
-
|
|
1046
|
-
---
|
|
1047
|
-
|
|
1048
|
-
**Hecho con ❤️ por HolyGrail CSS**
|
|
150
|
+
npm run vars:report # Estadísticas y listado completo
|
|
151
|
+
npm run vars:remove-unused # Limpia todas las variables no utilizadas
|
|
152
|
+
node src/docs-generator/variables-cli.js list --css=./dist/output.css
|
|
153
|
+
node src/docs-generator/variables-cli.js remove -- --hg-typo-font-size-18
|
|
154
|
+
```
|
|
155
|
+
> Después de borrar variables históricas conviene volver a ejecutar `npm run build` para regenerar el CSS sin referencias huérfanas.
|
|
156
|
+
|
|
157
|
+
## 9. Tema Dutti y demos
|
|
158
|
+
- El directorio `themes/dutti/` contiene CSS modular (_variables, _buttons, etc.) y un `demo.html` de referencia.
|
|
159
|
+
- `copy-theme-html.js` combina el tema en `dist/themes/dutti.css`, arregla las rutas del demo y añade una sidebar con accesos rápidos.
|
|
160
|
+
- Para crear tu propio tema copia la carpeta `themes/dutti`, ajusta los ficheros y actualiza `config.json → theme.name`.
|
|
161
|
+
|
|
162
|
+
## 10. Flujo de desarrollo
|
|
163
|
+
1. `npm run watch` genera `dist/output.css` e `index.html` cada vez que cambias `config.json`.
|
|
164
|
+
2. En paralelo, `npm run serve` levanta un servidor estático sobre `dist/` (puedes usar `npm run dev` para lanzar ambos).
|
|
165
|
+
3. Si trabajas con un tema, modifica los `.css` del tema y vuelve a ejecutar `npm run build` para regenerar el bundle y la demo.
|
|
166
|
+
4. Para trabajar con otros repos o guías, aprovecha los documentos de `docs/` (ver siguiente sección).
|
|
167
|
+
|
|
168
|
+
## 11. Tests y calidad
|
|
169
|
+
- `tests/run-all.js` ejecuta los tests unitarios (`config-loader`, `css-generator`, helpers, html generator...).
|
|
170
|
+
- Los tests imprimen resultados en consola para facilitar su lectura sin necesidad de frameworks pesados.
|
|
171
|
+
- Puedes integrar ESLint u otras herramientas externas, pero el repo provee funciones puras fáciles de testear en aislamiento.
|
|
172
|
+
|
|
173
|
+
## 12. Documentos complementarios
|
|
174
|
+
| Archivo | Contenido |
|
|
175
|
+
| ------- | --------- |
|
|
176
|
+
| `docs/SUPERPROMPT.md` | Prompt detallado para asistentes/IA que necesiten generar HTML usando HolyGrail5. |
|
|
177
|
+
| `docs/COMPARACION.md` | Comparativa HolyGrail5 vs alternativas (Tailwind, frameworks legacy, etc.). |
|
|
178
|
+
| `docs/GUIA-USO-OTRO-PROYECTO.md` | Pasos para integrar HolyGrail5 en proyectos existentes. |
|
|
179
|
+
| `docs/` + `dist/index.html` | Puedes publicar la guía como doc estática (GitHub Pages, Netlify, etc.). |
|
|
180
|
+
|
|
181
|
+
## 13. Recursos y soporte
|
|
182
|
+
- Repositorio: [github.com/holygrailcss/holygrail5](https://github.com/holygrailcss/holygrail5)
|
|
183
|
+
- npm: [holygrail5](https://www.npmjs.com/package/holygrail5)
|
|
184
|
+
- Issues y PRs son bienvenidos. Sigue el flujo clásico: fork → rama → PR.
|
|
185
|
+
- Si solo necesitas copiar la guía, ejecuta `npm run build` y publica `dist/` en el hosting de tu preferencia.
|
|
186
|
+
|
|
187
|
+
## 14. Licencia
|
|
188
|
+
MIT © HolyGrail CSS. Usa, adapta y comparte libremente mientras conserves la atribución.
|