orbital-ds 0.5.0 → 0.6.2

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/scripts/init.mjs CHANGED
@@ -1,55 +1,89 @@
1
- #!/usr/bin/env node
2
- /**
3
- * orbital-ds-init — crea el fichero de MARCA de una app.
4
- *
5
- * pnpm exec orbital-ds-init # crea src/brand.css si no existe
6
- * pnpm exec orbital-ds-init --out app/brand.css
7
- *
8
- * NUNCA sobrescribe un fichero existente. Ese fichero es de la app: ninguna
9
- * actualización de orbital-ds lo toca, y se importa DESPUÉS del tema para que gane.
10
- */
11
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
12
- import { dirname, resolve } from 'node:path';
13
- import { fileURLToPath } from 'node:url';
14
-
15
- const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
16
- const contract = JSON.parse(readFileSync(resolve(ROOT, 'contract.json'), 'utf8'));
17
-
18
- const outIdx = process.argv.indexOf('--out');
19
- const out = resolve(outIdx > -1 && process.argv[outIdx + 1] ? process.argv[outIdx + 1] : 'src/brand.css');
20
-
21
- if (existsSync(out)) {
22
- console.log(`Ya existe ${out}: no se toca (es de tu app).`);
23
- process.exit(0);
24
- }
25
-
26
- const lines = contract.brand.tokens.map(
27
- (t) => ` /* --${t.name}: ${t.example}; */ /* ${t.about} */`,
28
- );
29
-
30
- const css = `/*
31
- * MARCA de la app — fichero TUYO.
32
- *
33
- * Ninguna actualización de orbital-ds lo toca. Se importa DESPUÉS del tema, así que
34
- * lo que pongas aquí gana. Si no defines nada, se aplica el valor estándar del tema.
35
- *
36
- * Estas variables son el grupo estable de «lo que una marca suele cambiar»: renombrar
37
- * o quitar una de ellas es una versión MAYOR de orbital-ds, con aviso previo.
38
- * Descomenta solo lo que necesites y cambia el valor.
39
- *
40
- * Cambia el color principal TODO junto: primary, ring, link, brand, sidebar-primary y
41
- * chart-1 deben ir a la par (y comprueba el contraste del texto sobre ellos).
42
- */
43
- :root {
44
- ${lines.join('\n')}
45
- }
46
-
47
- /* Piel oscura: solo si tu marca necesita valores distintos en oscuro. */
48
- .dark {
49
- /* --primary: ...; */
50
- }
51
- `;
52
-
53
- mkdirSync(dirname(out), { recursive: true });
54
- writeFileSync(out, css);
55
- console.log(`Creado ${out}.\n\nImpórtalo DESPUÉS del tema, en el CSS de tu app:\n\n @import 'orbital-ds/themes/<tema>.css';\n @import './brand.css';\n`);
1
+ #!/usr/bin/env node
2
+ /**
3
+ * orbital-ds-init — crea el fichero de MARCA de una app.
4
+ *
5
+ * pnpm exec orbital-ds-init # crea src/brand.css si no existe
6
+ * pnpm exec orbital-ds-init --out app/brand.css
7
+ *
8
+ * NUNCA sobrescribe un fichero existente. Ese fichero es de la app: ninguna
9
+ * actualización de orbital-ds lo toca, y se importa DESPUÉS del tema para que gane.
10
+ *
11
+ * DESIGN.md: orbital-ds NO lo crea. Si la app ya tiene uno (`./DESIGN.md` o
12
+ * `--design ruta`), añade —o actualiza— solo un bloque delimitado por marcas
13
+ * `<!-- orbital-ds:start -->` … `<!-- orbital-ds:end -->`; el resto no se toca.
14
+ */
15
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
16
+ import { dirname, resolve } from 'node:path';
17
+ import { fileURLToPath } from 'node:url';
18
+
19
+ const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
20
+ const contract = JSON.parse(readFileSync(resolve(ROOT, 'contract.json'), 'utf8'));
21
+
22
+ const outIdx = process.argv.indexOf('--out');
23
+ const out = resolve(outIdx > -1 && process.argv[outIdx + 1] ? process.argv[outIdx + 1] : 'src/brand.css');
24
+
25
+ const brandExiste = existsSync(out);
26
+ if (brandExiste) console.log(`Ya existe ${out}: no se toca (es de tu app).`);
27
+
28
+ if (!brandExiste) {
29
+ const lines = contract.brand.tokens.map(
30
+ (t) => ` /* --${t.name}: ${t.example}; */ /* ${t.about} */`,
31
+ );
32
+
33
+ const css = `/*
34
+ * MARCA de la app — fichero TUYO.
35
+ *
36
+ * Ninguna actualización de orbital-ds lo toca. Se importa DESPUÉS del tema, así que
37
+ * lo que pongas aquí gana. Si no defines nada, se aplica el valor estándar del tema.
38
+ *
39
+ * Estas variables son el grupo estable de «lo que una marca suele cambiar»: renombrar
40
+ * o quitar una de ellas es una versión MAYOR de orbital-ds, con aviso previo.
41
+ * Descomenta solo lo que necesites y cambia el valor.
42
+ *
43
+ * Cambia el color principal TODO junto: primary, ring, link, brand, sidebar-primary y
44
+ * chart-1 deben ir a la par (y comprueba el contraste del texto sobre ellos).
45
+ */
46
+ :root {
47
+ ${lines.join('\n')}
48
+ }
49
+
50
+ /* Piel oscura: solo si tu marca necesita valores distintos en oscuro. */
51
+ .dark {
52
+ /* --primary: ...; */
53
+ }
54
+ `;
55
+
56
+ mkdirSync(dirname(out), { recursive: true });
57
+ writeFileSync(out, css);
58
+ console.log(`Creado ${out}.\n\nImpórtalo DESPUÉS del tema, en el CSS de tu app:\n\n @import 'orbital-ds/themes/<tema>.css';\n @import './brand.css';\n`);
59
+ }
60
+
61
+ // ── DESIGN.md de la app: bloque adicional, nunca el fichero entero ───────────────
62
+ const designIdx = process.argv.indexOf('--design');
63
+ const design = resolve(designIdx > -1 && process.argv[designIdx + 1] ? process.argv[designIdx + 1] : 'DESIGN.md');
64
+ if (existsSync(design)) {
65
+ const INI = '<!-- orbital-ds:start -->';
66
+ const FIN = '<!-- orbital-ds:end -->';
67
+ const bloque = `${INI}
68
+ ## Sistema de diseño (orbital-ds)
69
+
70
+ Bloque gestionado por \`orbital-ds-init\`; lo de fuera de las marcas es de la app y no se toca.
71
+
72
+ - Reglas de uso: \`node_modules/orbital-ds/AGENTS.md\`
73
+ - Contrato de tokens: \`orbital-ds/contract.json\` · componentes: \`orbital-ds/components.manifest.json\`
74
+ - Cada tema trae su guía (\`orbital-ds/themes/<tema>.guide.md\`) y su ficha (\`<tema>.meta.json\`).
75
+ - La marca de la app va en \`brand.css\` (importado después del tema), nunca editando el paquete.
76
+ - Comprobación: \`pnpm exec orbital-ds-doctor\`
77
+ ${FIN}`;
78
+ const actual = readFileSync(design, 'utf8');
79
+ let nuevo;
80
+ if (actual.includes(INI) && actual.includes(FIN)) {
81
+ nuevo = actual.slice(0, actual.indexOf(INI)) + bloque + actual.slice(actual.indexOf(FIN) + FIN.length);
82
+ } else {
83
+ nuevo = `${actual.replace(/\s*$/, '')}\n\n${bloque}\n`;
84
+ }
85
+ if (nuevo !== actual) {
86
+ writeFileSync(design, nuevo);
87
+ console.log(`Actualizado el bloque de orbital-ds en ${design} (el resto no se toca).`);
88
+ } else console.log(`${design}: el bloque de orbital-ds ya está al día.`);
89
+ }