holygrail5 1.0.19 → 1.0.21
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 +88 -18
- package/config.json +205 -77
- package/dist/assets/fonts/suisse-intl-light.woff +0 -0
- package/dist/assets/fonts/suisse-intl-light.woff2 +0 -0
- package/dist/assets/fonts/suisse-intl-medium.woff +0 -0
- package/dist/assets/fonts/suisse-intl-medium.woff2 +0 -0
- package/dist/assets/fonts/suisse-intl-regular.woff +0 -0
- package/dist/assets/fonts/suisse-intl-regular.woff2 +0 -0
- package/dist/assets/fonts/suisse-intl-semibold.woff +0 -0
- package/dist/assets/fonts/suisse-intl-semibold.woff2 +0 -0
- package/dist/assets/fonts/suisse-works-bold.woff +0 -0
- package/dist/assets/fonts/suisse-works-bold.woff2 +0 -0
- package/dist/assets/fonts/suisse-works-medium.woff +0 -0
- package/dist/assets/fonts/suisse-works-medium.woff2 +0 -0
- package/dist/assets/fonts/suisse-works-regular.woff +0 -0
- package/dist/assets/fonts/suisse-works-regular.woff2 +0 -0
- package/dist/componentes.html +429 -0
- package/dist/developer-guide.md +7 -7
- package/dist/guide-styles.css +197 -25
- package/dist/index.html +807 -689
- package/dist/output.css +217 -114
- package/dist/skills.html +14 -8
- package/dist/themes/dutti-demo.html +713 -19
- package/dist/themes/dutti.css +67 -16
- package/dist/themes/limited-demo.html +1121 -0
- package/dist/themes/limited.css +2493 -0
- package/package.json +1 -1
- package/src/.data/.previous-values.json +151 -84
- package/src/assets/fonts/suisse-intl-light.woff +0 -0
- package/src/assets/fonts/suisse-intl-light.woff2 +0 -0
- package/src/assets/fonts/suisse-intl-medium.woff +0 -0
- package/src/assets/fonts/suisse-intl-medium.woff2 +0 -0
- package/src/assets/fonts/suisse-intl-regular.woff +0 -0
- package/src/assets/fonts/suisse-intl-regular.woff2 +0 -0
- package/src/assets/fonts/suisse-intl-semibold.woff +0 -0
- package/src/assets/fonts/suisse-intl-semibold.woff2 +0 -0
- package/src/assets/fonts/suisse-works-bold.woff +0 -0
- package/src/assets/fonts/suisse-works-bold.woff2 +0 -0
- package/src/assets/fonts/suisse-works-medium.woff +0 -0
- package/src/assets/fonts/suisse-works-medium.woff2 +0 -0
- package/src/assets/fonts/suisse-works-regular.woff +0 -0
- package/src/assets/fonts/suisse-works-regular.woff2 +0 -0
- package/src/build/asset-manager.js +94 -3
- package/src/build/build-orchestrator.js +74 -12
- package/src/build/components-generator.js +584 -0
- package/src/build/skills-generator.js +43 -5
- package/src/build/theme-config-loader.js +58 -0
- package/src/build/theme-transformer.js +109 -16
- package/src/build/theme-vars-table-generator.js +349 -0
- package/src/build/typo-table-generator.js +154 -0
- package/src/docs-generator/guide-styles.css +197 -24
- package/src/docs-generator/html-generator.js +92 -246
- package/src/docs-generator/sections/colors-section.js +109 -0
- package/src/docs-generator/value-tracker.js +154 -0
- package/src/generators/typo-generator.js +2 -1
- package/src/generators/utils.js +90 -1
- package/src/skills.html +1 -0
- package/src/watch-config.js +99 -32
- package/themes/{dutti → _base}/_buttons.css +2 -2
- package/themes/{dutti → _base}/_checkboxes.css +1 -1
- package/themes/{dutti → _base}/_forms.css +1 -1
- package/themes/{dutti → _base}/_inputs.css +55 -10
- package/themes/{dutti → _base}/_labels.css +1 -1
- package/themes/dutti/README.md +67 -21
- package/themes/dutti/_variables.css +7 -1
- package/themes/dutti/demo.html +18 -14
- package/themes/dutti/theme.css +22 -44
- package/themes/dutti/theme.json +86 -0
- package/themes/limited/_variables.css +123 -0
- package/themes/limited/demo.html +296 -0
- package/themes/limited/theme.css +32 -0
- package/themes/limited/theme.json +105 -0
- /package/themes/{dutti → _base}/_containers.css +0 -0
- /package/themes/{dutti → _base}/_radios.css +0 -0
- /package/themes/{dutti → _base}/_switches.css +0 -0
- /package/themes/{dutti → _base}/components/_icons.css +0 -0
- /package/themes/{dutti → _base}/objects/_grid.css +0 -0
|
@@ -5,10 +5,12 @@ const path = require('path');
|
|
|
5
5
|
const { loadConfig } = require('../config-loader');
|
|
6
6
|
const { generateCSS } = require('../css-generator');
|
|
7
7
|
const { generateHTML } = require('../docs-generator/html-generator');
|
|
8
|
-
const { writeFile, combineThemeCSS } = require('../generators/utils');
|
|
8
|
+
const { writeFile, combineThemeCSS, resolveActiveThemes } = require('../generators/utils');
|
|
9
9
|
const { AssetManager } = require('./asset-manager');
|
|
10
10
|
const { ThemeTransformer } = require('./theme-transformer');
|
|
11
11
|
const { generateSkillsPage } = require('./skills-generator');
|
|
12
|
+
const { generateComponentsPage } = require('./components-generator');
|
|
13
|
+
const { loadThemeConfig } = require('./theme-config-loader');
|
|
12
14
|
|
|
13
15
|
class BuildOrchestrator {
|
|
14
16
|
constructor(options = {}) {
|
|
@@ -106,10 +108,14 @@ class BuildOrchestrator {
|
|
|
106
108
|
|
|
107
109
|
/**
|
|
108
110
|
* Transforma el HTML del tema agregando sidebar y scripts
|
|
109
|
-
* @param {Object} themeConfig - Configuración del tema
|
|
111
|
+
* @param {Object} themeConfig - Configuración del tema en config.json (name + enabled)
|
|
112
|
+
* @param {Object} [fullConfig] - Config completo, para inyectar tablas dinámicas (typo, etc.)
|
|
113
|
+
* @param {Array<{name:string,label:string}>} [themesForNav] - Lista de
|
|
114
|
+
* temas activos a exponer en la nav. Si se omite, el ThemeTransformer
|
|
115
|
+
* cae al fallback estático.
|
|
110
116
|
* @returns {boolean} - true si se transformó exitosamente
|
|
111
117
|
*/
|
|
112
|
-
buildThemeHTML(themeConfig) {
|
|
118
|
+
buildThemeHTML(themeConfig, fullConfig = null, themesForNav = null) {
|
|
113
119
|
if (!themeConfig || !themeConfig.enabled || !themeConfig.name) {
|
|
114
120
|
return false;
|
|
115
121
|
}
|
|
@@ -118,12 +124,19 @@ class BuildOrchestrator {
|
|
|
118
124
|
const sourceFile = path.join(this.projectRoot, 'themes', themeName, 'demo.html');
|
|
119
125
|
const outputDir = path.dirname(this.outputPath);
|
|
120
126
|
const targetFile = path.join(outputDir, 'themes', `${themeName}-demo.html`);
|
|
121
|
-
|
|
127
|
+
|
|
128
|
+
// Cargar el theme.json del tema activo (opcional). Pasarlo al transformer
|
|
129
|
+
// permite a la demo mostrar metadatos y tablas de variables del tema.
|
|
130
|
+
const themeData = loadThemeConfig(this.projectRoot, themeName, this.silent);
|
|
131
|
+
|
|
122
132
|
return this.themeTransformer.transform(
|
|
123
133
|
sourceFile,
|
|
124
134
|
targetFile,
|
|
125
135
|
themeName,
|
|
126
|
-
this.silent
|
|
136
|
+
this.silent,
|
|
137
|
+
fullConfig,
|
|
138
|
+
themeData,
|
|
139
|
+
themesForNav
|
|
127
140
|
);
|
|
128
141
|
}
|
|
129
142
|
|
|
@@ -160,15 +173,48 @@ class BuildOrchestrator {
|
|
|
160
173
|
const assetsResult = this.assetManager.copyAssets('all', this.silent);
|
|
161
174
|
result.assets = assetsResult;
|
|
162
175
|
|
|
163
|
-
// 5. Generar tema si
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
176
|
+
// 5. Generar tema(s) si están habilitados.
|
|
177
|
+
// La resolución de temas activos (soporte de `config.themes[]` +
|
|
178
|
+
// fallback a `config.theme` singular) está centralizada en
|
|
179
|
+
// `resolveActiveThemes` para que todos los generadores (HTML de
|
|
180
|
+
// guía, nav de demos, skills.html, watch-config) usen la misma
|
|
181
|
+
// lista. Devuelve entradas con `{ name, enabled:true, label }`.
|
|
182
|
+
const activeThemes = resolveActiveThemes(configData);
|
|
183
|
+
|
|
184
|
+
// La lista para la nav sólo necesita `name` + `label`; el flag
|
|
185
|
+
// `enabled` ya fue filtrado por el helper.
|
|
186
|
+
const themesForNav = activeThemes.map(t => ({ name: t.name, label: t.label }));
|
|
187
|
+
|
|
188
|
+
// Para iterar el build, necesitamos las entradas originales del
|
|
189
|
+
// config (pueden incluir flags adicionales específicos de un
|
|
190
|
+
// tema). Igual que antes, seguimos soportando la forma antigua.
|
|
191
|
+
const themeList = Array.isArray(configData.themes)
|
|
192
|
+
? configData.themes
|
|
193
|
+
: (configData.theme ? [configData.theme] : []);
|
|
194
|
+
|
|
195
|
+
// Resultado agregado: true si AL MENOS un tema se generó correctamente.
|
|
196
|
+
// Se expone además `themes` con el detalle por tema.
|
|
197
|
+
result.theme = { css: false, html: false };
|
|
198
|
+
result.themes = [];
|
|
199
|
+
|
|
200
|
+
for (const themeConfig of themeList) {
|
|
201
|
+
const cssOk = this.buildThemeCSS(themeConfig);
|
|
202
|
+
const htmlOk = this.buildThemeHTML(themeConfig, configData, themesForNav);
|
|
203
|
+
result.themes.push({
|
|
204
|
+
name: themeConfig && themeConfig.name,
|
|
205
|
+
css: cssOk,
|
|
206
|
+
html: htmlOk
|
|
207
|
+
});
|
|
208
|
+
if (cssOk) result.theme.css = true;
|
|
209
|
+
if (htmlOk) result.theme.html = true;
|
|
167
210
|
}
|
|
168
211
|
|
|
169
|
-
// 6. Generar página de skills si existe la carpeta skills
|
|
212
|
+
// 6. Generar página de skills si existe la carpeta skills/.
|
|
213
|
+
// Pasamos el config para que la nav de skills.html enlace sólo a
|
|
214
|
+
// demos de temas realmente activos (dutti+limited por defecto,
|
|
215
|
+
// pero un consumidor puede tener sólo uno).
|
|
170
216
|
try {
|
|
171
|
-
const skillsHtml = generateSkillsPage(this.projectRoot);
|
|
217
|
+
const skillsHtml = generateSkillsPage(this.projectRoot, configData);
|
|
172
218
|
if (skillsHtml) {
|
|
173
219
|
const distDir = path.dirname(this.outputPath);
|
|
174
220
|
const skillsPath = path.join(distDir, 'skills.html');
|
|
@@ -184,7 +230,23 @@ class BuildOrchestrator {
|
|
|
184
230
|
} catch (err) {
|
|
185
231
|
if (!this.silent) console.warn('⚠️ No se pudo generar skills.html:', err.message);
|
|
186
232
|
}
|
|
187
|
-
|
|
233
|
+
|
|
234
|
+
// 7. Generar página de componentes base si existe themes/_base/.
|
|
235
|
+
// Se renderiza con el tema Dutti como base genérica (ver
|
|
236
|
+
// components-generator.js → BASE_THEME). La nav recibe la lista
|
|
237
|
+
// de temas activos para enlazar a sus demos.
|
|
238
|
+
try {
|
|
239
|
+
const componentsHtml = generateComponentsPage(this.projectRoot, configData);
|
|
240
|
+
if (componentsHtml) {
|
|
241
|
+
const distDir = path.dirname(this.outputPath);
|
|
242
|
+
const componentsPath = path.join(distDir, 'componentes.html');
|
|
243
|
+
writeFile(componentsPath, componentsHtml, 'Componentes');
|
|
244
|
+
result.components = true;
|
|
245
|
+
}
|
|
246
|
+
} catch (err) {
|
|
247
|
+
if (!this.silent) console.warn('⚠️ No se pudo generar componentes.html:', err.message);
|
|
248
|
+
}
|
|
249
|
+
|
|
188
250
|
result.success = true;
|
|
189
251
|
|
|
190
252
|
if (!this.silent) {
|