@hale-bopp/valentino-engine 2.5.0 → 2.6.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/css/tokens.css +142 -0
- package/dist/bin/commands/spool.d.ts +8 -0
- package/dist/bin/commands/spool.d.ts.map +1 -0
- package/dist/bin/commands/spool.js +74 -0
- package/dist/bin/commands/spool.js.map +1 -0
- package/dist/bin/valentino.js +5 -0
- package/dist/bin/valentino.js.map +1 -1
- package/dist/core/spool.d.ts +38 -0
- package/dist/core/spool.d.ts.map +1 -0
- package/dist/core/spool.js +194 -0
- package/dist/core/spool.js.map +1 -0
- package/package.json +2 -1
package/css/tokens.css
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/* === VALENTINO TOKENS ===
|
|
2
|
+
* Il DNA di Valentino. Questi sono i valori che l'engine ritiene corretti.
|
|
3
|
+
* Sovrascrivili nel tuo theme.css per adattare i colori al tuo brand,
|
|
4
|
+
* ma la struttura (7 superfici, rhythm contract, scale) è non negoziabile.
|
|
5
|
+
*
|
|
6
|
+
* Chi usa Valentino accetta questo contratto:
|
|
7
|
+
* 7 superfici → default, muted, accent, dark, shell-dark, reading-light, ops-light
|
|
8
|
+
* Rhythm → block spacing (xl/l/m), stack spacing, leading, measure
|
|
9
|
+
* Typography → 6 step fluid scale
|
|
10
|
+
* 3 accent slot → gold, cyan, violet (rinomina come vuoi, ma servono 3)
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
:root {
|
|
14
|
+
/* --- Palette --- */
|
|
15
|
+
--bg-deep-void: #050812;
|
|
16
|
+
--rgb-deep-void: 5, 8, 18;
|
|
17
|
+
--bg-surface: #0a1125;
|
|
18
|
+
--rgb-surface: 10, 17, 37;
|
|
19
|
+
|
|
20
|
+
/* Text hierarchy */
|
|
21
|
+
--text-primary: #f8fafc;
|
|
22
|
+
--text-secondary: #cbd5e1;
|
|
23
|
+
--text-muted: #64748b;
|
|
24
|
+
|
|
25
|
+
/* 3 accent slot (sovrascrivili per il tuo brand) */
|
|
26
|
+
--text-sovereign-gold: #f5d586;
|
|
27
|
+
--rgb-sovereign-gold: 245, 213, 134;
|
|
28
|
+
--accent-neural-cyan: #0cd6c7;
|
|
29
|
+
--rgb-neural-cyan: 12, 214, 199;
|
|
30
|
+
--accent-violet: #8c52ff;
|
|
31
|
+
--rgb-violet: 140, 82, 255;
|
|
32
|
+
|
|
33
|
+
/* Semantic status */
|
|
34
|
+
--status-success: #16a34a;
|
|
35
|
+
--status-danger: #dc2626;
|
|
36
|
+
--status-warning: #d97706;
|
|
37
|
+
|
|
38
|
+
/* Borders & glass */
|
|
39
|
+
--border-color: rgba(var(--rgb-neural-cyan), 0.15);
|
|
40
|
+
--glass-border: rgba(var(--rgb-neural-cyan), 0.25);
|
|
41
|
+
--glass-border-glow: rgba(var(--rgb-neural-cyan), 0.6);
|
|
42
|
+
--glass-bg: linear-gradient(135deg, rgba(var(--rgb-neural-cyan), 0.08) 0%, rgba(var(--rgb-violet), 0.08) 100%);
|
|
43
|
+
|
|
44
|
+
/* Code */
|
|
45
|
+
--code-gold: #c8aa6e;
|
|
46
|
+
--code-cyan: #0ac8b9;
|
|
47
|
+
|
|
48
|
+
/* --- Valentino Surfaces (7 × 5 — il contratto) --- */
|
|
49
|
+
|
|
50
|
+
/* default: bianco pulito */
|
|
51
|
+
--valentino-surface-default-background: #ffffff;
|
|
52
|
+
--valentino-surface-default-text: #0f172a;
|
|
53
|
+
--valentino-surface-default-text-muted: #475569;
|
|
54
|
+
--valentino-surface-default-card-bg: rgba(255, 255, 255, 0.96);
|
|
55
|
+
--valentino-surface-default-card-border: rgba(203, 213, 225, 0.95);
|
|
56
|
+
|
|
57
|
+
/* muted: grigio sottile */
|
|
58
|
+
--valentino-surface-muted-background: linear-gradient(180deg, #f8fafc 0%, #eef2f7 100%);
|
|
59
|
+
--valentino-surface-muted-text: #0f172a;
|
|
60
|
+
--valentino-surface-muted-text-muted: #475569;
|
|
61
|
+
--valentino-surface-muted-card-bg: rgba(255, 255, 255, 0.9);
|
|
62
|
+
--valentino-surface-muted-card-border: rgba(191, 219, 254, 0.65);
|
|
63
|
+
|
|
64
|
+
/* accent: calore e attenzione */
|
|
65
|
+
--valentino-surface-accent-background:
|
|
66
|
+
radial-gradient(circle at top left, rgba(244, 63, 94, 0.18), transparent 32%),
|
|
67
|
+
radial-gradient(circle at top right, rgba(14, 165, 233, 0.16), transparent 28%),
|
|
68
|
+
linear-gradient(180deg, #fff7fb 0%, #fff1f2 100%);
|
|
69
|
+
--valentino-surface-accent-text: #1f2937;
|
|
70
|
+
--valentino-surface-accent-text-muted: #4b5563;
|
|
71
|
+
--valentino-surface-accent-card-bg: rgba(255, 255, 255, 0.88);
|
|
72
|
+
--valentino-surface-accent-card-border: rgba(251, 113, 133, 0.28);
|
|
73
|
+
|
|
74
|
+
/* dark: profondità */
|
|
75
|
+
--valentino-surface-dark-background:
|
|
76
|
+
radial-gradient(circle at 50% 0%, rgba(244, 63, 94, 0.24), transparent 36%),
|
|
77
|
+
linear-gradient(180deg, #020617 0%, #0f172a 100%);
|
|
78
|
+
--valentino-surface-dark-text: #f8fafc;
|
|
79
|
+
--valentino-surface-dark-text-muted: rgba(226, 232, 240, 0.82);
|
|
80
|
+
--valentino-surface-dark-card-bg: rgba(15, 23, 42, 0.74);
|
|
81
|
+
--valentino-surface-dark-card-border: rgba(100, 116, 139, 0.35);
|
|
82
|
+
|
|
83
|
+
/* shell-dark: eredita dark */
|
|
84
|
+
--valentino-surface-shell-dark-background: var(--valentino-surface-dark-background);
|
|
85
|
+
--valentino-surface-shell-dark-text: var(--valentino-surface-dark-text);
|
|
86
|
+
--valentino-surface-shell-dark-text-muted: var(--valentino-surface-dark-text-muted);
|
|
87
|
+
--valentino-surface-shell-dark-card-bg: var(--valentino-surface-dark-card-bg);
|
|
88
|
+
--valentino-surface-shell-dark-card-border: var(--valentino-surface-dark-card-border);
|
|
89
|
+
|
|
90
|
+
/* reading-light: ottimizzato per testo lungo */
|
|
91
|
+
--valentino-surface-reading-light-background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);
|
|
92
|
+
--valentino-surface-reading-light-text: #0f172a;
|
|
93
|
+
--valentino-surface-reading-light-text-muted: #334155;
|
|
94
|
+
--valentino-surface-reading-light-card-bg: rgba(255, 255, 255, 0.98);
|
|
95
|
+
--valentino-surface-reading-light-card-border: rgba(203, 213, 225, 0.88);
|
|
96
|
+
|
|
97
|
+
/* ops-light: dashboard / backoffice */
|
|
98
|
+
--valentino-surface-ops-light-background: linear-gradient(180deg, #f8fafc 0%, #eef2ff 100%);
|
|
99
|
+
--valentino-surface-ops-light-text: #0f172a;
|
|
100
|
+
--valentino-surface-ops-light-text-muted: #475569;
|
|
101
|
+
--valentino-surface-ops-light-card-bg: rgba(255, 255, 255, 0.94);
|
|
102
|
+
--valentino-surface-ops-light-card-border: rgba(148, 163, 184, 0.3);
|
|
103
|
+
|
|
104
|
+
/* --- Rhythm Contract (non negoziabile) --- */
|
|
105
|
+
--valentino-rhythm-space-block-xl: clamp(4.5rem, 7vw, 7rem);
|
|
106
|
+
--valentino-rhythm-space-block-l: clamp(3.5rem, 5vw, 5.5rem);
|
|
107
|
+
--valentino-rhythm-space-block-m: clamp(2.75rem, 4vw, 4rem);
|
|
108
|
+
--valentino-rhythm-space-stack-m: 1rem;
|
|
109
|
+
--valentino-rhythm-space-stack-l: 1.5rem;
|
|
110
|
+
--valentino-rhythm-leading-display: 1.05;
|
|
111
|
+
--valentino-rhythm-leading-body: 1.7;
|
|
112
|
+
--valentino-rhythm-measure-reading: 68ch;
|
|
113
|
+
--valentino-rhythm-measure-support: 42rem;
|
|
114
|
+
--valentino-rhythm-measure-feature: 46rem;
|
|
115
|
+
--valentino-rhythm-measure-ops: 52rem;
|
|
116
|
+
--valentino-rhythm-measure-compact: 34rem;
|
|
117
|
+
|
|
118
|
+
/* --- Elevation --- */
|
|
119
|
+
--z-ground: 0;
|
|
120
|
+
--z-raised: 10;
|
|
121
|
+
--z-sticky: 100;
|
|
122
|
+
--z-modal: 9000;
|
|
123
|
+
--z-toast: 9500;
|
|
124
|
+
--z-overlord: 10000;
|
|
125
|
+
|
|
126
|
+
/* --- Typography --- */
|
|
127
|
+
--font-family: 'Inter', 'Outfit', system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
|
|
128
|
+
--font-mono: 'Fira Code', 'Courier New', monospace;
|
|
129
|
+
|
|
130
|
+
/* Fluid scale */
|
|
131
|
+
--text-step-0: clamp(1rem, 0.95vw + 0.8rem, 1.125rem);
|
|
132
|
+
--text-step-1: clamp(1.2rem, 1.5vw + 0.9rem, 1.5rem);
|
|
133
|
+
--text-step-2: clamp(1.44rem, 2.2vw + 1rem, 2rem);
|
|
134
|
+
--text-step-3: clamp(1.728rem, 3.2vw + 1.1rem, 2.66rem);
|
|
135
|
+
--text-step-4: clamp(2.074rem, 4.5vw + 1.2rem, 3.55rem);
|
|
136
|
+
--text-step-5: clamp(2.488rem, 6.2vw + 1.3rem, 4.75rem);
|
|
137
|
+
|
|
138
|
+
/* --- Animation Timing --- */
|
|
139
|
+
--transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
|
|
140
|
+
--transition-ease: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
141
|
+
--transition-slow: 0.5s cubic-bezier(0.4, 0, 0.2, 1);
|
|
142
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* valentino spool <directory> [--out <file>]
|
|
3
|
+
*
|
|
4
|
+
* Analyze an existing site's CSS and generate Valentino-compatible custom tokens.
|
|
5
|
+
* 80% automatic extraction, 20% operator refinement.
|
|
6
|
+
*/
|
|
7
|
+
export declare function runSpool(args: string[]): void;
|
|
8
|
+
//# sourceMappingURL=spool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spool.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/spool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsE7C"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* valentino spool <directory> [--out <file>]
|
|
3
|
+
*
|
|
4
|
+
* Analyze an existing site's CSS and generate Valentino-compatible custom tokens.
|
|
5
|
+
* 80% automatic extraction, 20% operator refinement.
|
|
6
|
+
*/
|
|
7
|
+
import { writeFileSync } from 'node:fs';
|
|
8
|
+
import { resolve } from 'node:path';
|
|
9
|
+
import { spool } from '../../core/spool.js';
|
|
10
|
+
export function runSpool(args) {
|
|
11
|
+
if (!args[0]) {
|
|
12
|
+
console.error('Usage: valentino spool <directory> [--out <file>]');
|
|
13
|
+
console.error(' Analyzes CSS in <directory> and generates custom-tokens.css');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
const dir = args[0];
|
|
17
|
+
let outFile = null;
|
|
18
|
+
for (let i = 1; i < args.length; i++) {
|
|
19
|
+
if (args[i] === '--out' && args[i + 1]) {
|
|
20
|
+
outFile = args[++i];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
console.log(`\n🧵 Valentino Spool — analyzing ${dir}...\n`);
|
|
24
|
+
try {
|
|
25
|
+
const result = spool(dir);
|
|
26
|
+
const a = result.analysis;
|
|
27
|
+
// Report
|
|
28
|
+
console.log(` Files: ${a.cssFiles.length} CSS files, ${a.totalLines} lines`);
|
|
29
|
+
console.log(` Colors: ${a.colors.length} unique (top 20 shown)`);
|
|
30
|
+
console.log(` Sections: ~${a.sectionCount} detected`);
|
|
31
|
+
console.log(` Hero: ${a.hasHero ? '✓' : '✗'} Grid: ${a.hasGrid ? '✓' : '✗'} Form: ${a.hasForm ? '✓' : '✗'}`);
|
|
32
|
+
console.log(` Template: ${a.suggestedTemplate}`);
|
|
33
|
+
console.log('');
|
|
34
|
+
if (a.darkestBg) {
|
|
35
|
+
console.log(` Darkest bg: ${a.darkestBg.value} (lum ${a.darkestBg.luminance.toFixed(3)})`);
|
|
36
|
+
}
|
|
37
|
+
if (a.lightestBg) {
|
|
38
|
+
console.log(` Lightest bg: ${a.lightestBg.value} (lum ${a.lightestBg.luminance.toFixed(3)})`);
|
|
39
|
+
}
|
|
40
|
+
if (a.accents.length > 0) {
|
|
41
|
+
console.log(` Accents: ${a.accents.map(c => c.value).join(', ')}`);
|
|
42
|
+
}
|
|
43
|
+
console.log('');
|
|
44
|
+
// Output
|
|
45
|
+
if (outFile) {
|
|
46
|
+
const absOut = resolve(outFile);
|
|
47
|
+
writeFileSync(absOut, result.customTokensCss, 'utf-8');
|
|
48
|
+
console.log(` ✓ Written: ${absOut}`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.log('--- custom-tokens.css ---');
|
|
52
|
+
console.log(result.customTokensCss);
|
|
53
|
+
console.log('--- end ---');
|
|
54
|
+
console.log('\n Use --out <file> to write to disk.');
|
|
55
|
+
}
|
|
56
|
+
// Next steps
|
|
57
|
+
console.log(`
|
|
58
|
+
Next steps:
|
|
59
|
+
1. Import tokens + your custom overrides + base + template:
|
|
60
|
+
@import '@hale-bopp/valentino-engine/css/tokens.css';
|
|
61
|
+
@import './custom-tokens.css';
|
|
62
|
+
@import '@hale-bopp/valentino-engine/css/framework.base.css';
|
|
63
|
+
@import '@hale-bopp/valentino-engine/css/framework.${a.suggestedTemplate !== 'unknown' ? a.suggestedTemplate : 'corporate'}.css';
|
|
64
|
+
2. Map your HTML sections to <div class="valentino-section-shell" data-surface="..." data-rhythm-profile="...">
|
|
65
|
+
3. Run: valentino theme-audit custom-tokens.css — to verify contrast
|
|
66
|
+
4. Run: valentino audit your-styles.css — to check guardrails
|
|
67
|
+
`);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
console.error(` ✗ ${err.message}`);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=spool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spool.js","sourceRoot":"","sources":["../../../src/bin/commands/spool.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/valentino.js
CHANGED
|
@@ -14,6 +14,7 @@ import { runInit } from './commands/init.js';
|
|
|
14
14
|
import { runLlms } from './commands/llms.js';
|
|
15
15
|
import { runCockpit } from './commands/cockpit.js';
|
|
16
16
|
import { runThemeAudit } from './commands/theme-audit.js';
|
|
17
|
+
import { runSpool } from './commands/spool.js';
|
|
17
18
|
const [, , command, ...args] = process.argv;
|
|
18
19
|
switch (command) {
|
|
19
20
|
case 'init':
|
|
@@ -59,6 +60,9 @@ switch (command) {
|
|
|
59
60
|
case 'theme-audit':
|
|
60
61
|
runThemeAudit(args);
|
|
61
62
|
break;
|
|
63
|
+
case 'spool':
|
|
64
|
+
runSpool(args);
|
|
65
|
+
break;
|
|
62
66
|
default:
|
|
63
67
|
console.log(`
|
|
64
68
|
🎨 Valentino Engine v0.1.0 — Antifragile Open Source UI Design Engine
|
|
@@ -79,6 +83,7 @@ Usage:
|
|
|
79
83
|
valentino cockpit <spec.json> --parse "text" Parse intent (dry run)
|
|
80
84
|
valentino cockpit --schema <page|action|section [type]> Print JSON Schema
|
|
81
85
|
valentino theme-audit <pack.json> [--registry r.json] [--level AA|AAA] Audit theme-pack contrast on surfaces
|
|
86
|
+
valentino spool <directory> [--out <file>] Analyze site CSS → Valentino tokens
|
|
82
87
|
|
|
83
88
|
GitHub: https://github.com/hale-bopp-data/valentino-engine
|
|
84
89
|
`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valentino.js","sourceRoot":"","sources":["../../src/bin/valentino.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"valentino.js","sourceRoot":"","sources":["../../src/bin/valentino.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,CAAC,EAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAE3C,QAAQ,OAAO,EAAE,CAAC;IACd,KAAK,MAAM;QACP,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,MAAM;IAEV,KAAK,OAAO;QACR,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,MAAM;IAEV,KAAK,UAAU;QACX,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM;IAEV,KAAK,YAAY;QACb,aAAa,EAAE,CAAC;QAChB,MAAM;IAEV,KAAK,OAAO;QACR,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM;IAEV,KAAK,SAAS;QACV,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACvD,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM;IAEV,KAAK,UAAU;QACX,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACxD,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM;IAEV,KAAK,UAAU;QACX,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM;IAEV,KAAK,MAAM;QACP,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,MAAM;IAEV,KAAK,SAAS;QACV,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM;IAEV,KAAK,aAAa;QACd,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM;IAEV,KAAK,OAAO;QACR,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,MAAM;IAEV;QACI,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;CAsBnB,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Valentino Spool — analyze an existing site and generate Valentino-compatible CSS + theme-pack.
|
|
3
|
+
*
|
|
4
|
+
* The spool reads CSS files from a directory, extracts colors and layout patterns,
|
|
5
|
+
* maps them to Valentino's token contract, and generates:
|
|
6
|
+
* 1. custom-tokens.css — color overrides for tokens.css
|
|
7
|
+
* 2. A recommendation for which template to use (corporate, landing, etc.)
|
|
8
|
+
*
|
|
9
|
+
* 80% automatic, 20% operator via cockpit.
|
|
10
|
+
*/
|
|
11
|
+
export interface ExtractedColor {
|
|
12
|
+
value: string;
|
|
13
|
+
rgb: [number, number, number];
|
|
14
|
+
luminance: number;
|
|
15
|
+
count: number;
|
|
16
|
+
role: 'background' | 'text' | 'accent' | 'border' | 'unknown';
|
|
17
|
+
}
|
|
18
|
+
export interface SpoolAnalysis {
|
|
19
|
+
sourceDir: string;
|
|
20
|
+
cssFiles: string[];
|
|
21
|
+
totalLines: number;
|
|
22
|
+
colors: ExtractedColor[];
|
|
23
|
+
darkestBg: ExtractedColor | null;
|
|
24
|
+
lightestBg: ExtractedColor | null;
|
|
25
|
+
primaryText: ExtractedColor | null;
|
|
26
|
+
accents: ExtractedColor[];
|
|
27
|
+
suggestedTemplate: 'corporate' | 'landing' | 'blog' | 'unknown';
|
|
28
|
+
sectionCount: number;
|
|
29
|
+
hasHero: boolean;
|
|
30
|
+
hasGrid: boolean;
|
|
31
|
+
hasForm: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface SpoolOutput {
|
|
34
|
+
analysis: SpoolAnalysis;
|
|
35
|
+
customTokensCss: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function spool(dir: string): SpoolOutput;
|
|
38
|
+
//# sourceMappingURL=spool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spool.d.ts","sourceRoot":"","sources":["../../src/core/spool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC/D;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,iBAAiB,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAmHD,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CA4E9C"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Valentino Spool — analyze an existing site and generate Valentino-compatible CSS + theme-pack.
|
|
3
|
+
*
|
|
4
|
+
* The spool reads CSS files from a directory, extracts colors and layout patterns,
|
|
5
|
+
* maps them to Valentino's token contract, and generates:
|
|
6
|
+
* 1. custom-tokens.css — color overrides for tokens.css
|
|
7
|
+
* 2. A recommendation for which template to use (corporate, landing, etc.)
|
|
8
|
+
*
|
|
9
|
+
* 80% automatic, 20% operator via cockpit.
|
|
10
|
+
*/
|
|
11
|
+
import { readFileSync, readdirSync, statSync } from 'node:fs';
|
|
12
|
+
import { resolve, extname } from 'node:path';
|
|
13
|
+
import { parseColor, relativeLuminance } from './contrast.js';
|
|
14
|
+
// --- Color extraction ---
|
|
15
|
+
const HEX_RE = /#(?:[0-9a-fA-F]{3,4}){1,2}\b/g;
|
|
16
|
+
const RGB_RE = /rgba?\(\s*\d+\s*,\s*\d+\s*,\s*\d+(?:\s*,\s*[\d.]+)?\s*\)/g;
|
|
17
|
+
function extractColorsFromCss(css) {
|
|
18
|
+
const map = new Map();
|
|
19
|
+
const addColor = (raw) => {
|
|
20
|
+
const rgb = parseColor(raw);
|
|
21
|
+
if (!rgb)
|
|
22
|
+
return;
|
|
23
|
+
const key = `#${rgb.map(c => c.toString(16).padStart(2, '0')).join('')}`;
|
|
24
|
+
const existing = map.get(key);
|
|
25
|
+
if (existing) {
|
|
26
|
+
existing.count++;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
map.set(key, { rgb, count: 1 });
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
for (const match of css.matchAll(HEX_RE))
|
|
33
|
+
addColor(match[0]);
|
|
34
|
+
for (const match of css.matchAll(RGB_RE))
|
|
35
|
+
addColor(match[0]);
|
|
36
|
+
return map;
|
|
37
|
+
}
|
|
38
|
+
function inferColorRole(rgb, lum) {
|
|
39
|
+
if (lum < 0.05)
|
|
40
|
+
return 'background'; // very dark → likely bg
|
|
41
|
+
if (lum > 0.85)
|
|
42
|
+
return 'background'; // very light → likely bg
|
|
43
|
+
if (lum < 0.15)
|
|
44
|
+
return 'text'; // dark → likely text
|
|
45
|
+
if (lum > 0.7)
|
|
46
|
+
return 'text'; // light text on dark bg
|
|
47
|
+
return 'accent'; // mid-range → accent/border
|
|
48
|
+
}
|
|
49
|
+
// --- Pattern detection ---
|
|
50
|
+
function detectPatterns(css) {
|
|
51
|
+
const lower = css.toLowerCase();
|
|
52
|
+
return {
|
|
53
|
+
hasHero: /\.hero|hero[-_]|data-rhythm-profile=['"]hero/i.test(css),
|
|
54
|
+
hasGrid: /display:\s*grid|grid-template|\.grid|\.row|\.col-/i.test(css),
|
|
55
|
+
hasForm: /form|input|textarea|\.contact|\.subscribe/i.test(css),
|
|
56
|
+
hasPricing: /\.pricing|\.plan|\.tier/i.test(css),
|
|
57
|
+
hasBlog: /\.post|\.article|\.blog|\.reading/i.test(css),
|
|
58
|
+
hasTestimonial: /\.testimonial|\.quote|\.review/i.test(css),
|
|
59
|
+
sectionCount: (lower.match(/section|\.section|data-surface/g) || []).length,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function suggestTemplate(patterns) {
|
|
63
|
+
if (patterns.hasBlog)
|
|
64
|
+
return 'blog';
|
|
65
|
+
if (patterns.hasPricing || patterns.hasTestimonial)
|
|
66
|
+
return 'corporate';
|
|
67
|
+
if (patterns.hasHero && patterns.sectionCount <= 6)
|
|
68
|
+
return 'landing';
|
|
69
|
+
if (patterns.hasGrid || patterns.hasForm)
|
|
70
|
+
return 'corporate';
|
|
71
|
+
return 'unknown';
|
|
72
|
+
}
|
|
73
|
+
// --- CSS generation ---
|
|
74
|
+
function rgbToHex(rgb) {
|
|
75
|
+
return '#' + rgb.map(c => c.toString(16).padStart(2, '0')).join('');
|
|
76
|
+
}
|
|
77
|
+
function generateCustomTokens(analysis) {
|
|
78
|
+
const lines = [
|
|
79
|
+
'/* === VALENTINO CUSTOM TOKENS (generated by spool) ===',
|
|
80
|
+
` * Source: ${analysis.sourceDir}`,
|
|
81
|
+
` * ${analysis.cssFiles.length} CSS files, ${analysis.totalLines} lines analyzed`,
|
|
82
|
+
` * Suggested template: ${analysis.suggestedTemplate}`,
|
|
83
|
+
' *',
|
|
84
|
+
' * Import AFTER tokens.css to override defaults:',
|
|
85
|
+
' * @import \'@hale-bopp/valentino-engine/css/tokens.css\';',
|
|
86
|
+
' * @import \'./custom-tokens.css\';',
|
|
87
|
+
' * @import \'@hale-bopp/valentino-engine/css/framework.base.css\';',
|
|
88
|
+
' */',
|
|
89
|
+
'',
|
|
90
|
+
':root {',
|
|
91
|
+
];
|
|
92
|
+
if (analysis.darkestBg) {
|
|
93
|
+
lines.push(` /* Extracted darkest background */`);
|
|
94
|
+
lines.push(` --bg-deep-void: ${analysis.darkestBg.value};`);
|
|
95
|
+
}
|
|
96
|
+
if (analysis.primaryText) {
|
|
97
|
+
lines.push(` /* Extracted primary text color */`);
|
|
98
|
+
const lum = analysis.primaryText.luminance;
|
|
99
|
+
if (lum > 0.5) {
|
|
100
|
+
lines.push(` --text-primary: ${analysis.primaryText.value};`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (analysis.accents.length >= 1) {
|
|
104
|
+
lines.push('');
|
|
105
|
+
lines.push(' /* Extracted accent colors (mapped to 3 slots) */');
|
|
106
|
+
const sorted = [...analysis.accents].sort((a, b) => b.count - a.count);
|
|
107
|
+
if (sorted[0])
|
|
108
|
+
lines.push(` --accent-neural-cyan: ${sorted[0].value};`);
|
|
109
|
+
if (sorted[1])
|
|
110
|
+
lines.push(` --accent-violet: ${sorted[1].value};`);
|
|
111
|
+
if (sorted[2])
|
|
112
|
+
lines.push(` --text-sovereign-gold: ${sorted[2].value};`);
|
|
113
|
+
}
|
|
114
|
+
if (analysis.lightestBg) {
|
|
115
|
+
lines.push('');
|
|
116
|
+
lines.push(' /* Extracted lightest background (for light surfaces) */');
|
|
117
|
+
lines.push(` --valentino-surface-default-background: ${analysis.lightestBg.value};`);
|
|
118
|
+
}
|
|
119
|
+
lines.push('}');
|
|
120
|
+
return lines.join('\n');
|
|
121
|
+
}
|
|
122
|
+
// --- Main spool function ---
|
|
123
|
+
export function spool(dir) {
|
|
124
|
+
const absDir = resolve(dir);
|
|
125
|
+
// Find CSS files
|
|
126
|
+
const cssFiles = [];
|
|
127
|
+
const walkDir = (d) => {
|
|
128
|
+
for (const entry of readdirSync(d)) {
|
|
129
|
+
const full = resolve(d, entry);
|
|
130
|
+
if (entry === 'node_modules' || entry === '.git' || entry === 'dist')
|
|
131
|
+
continue;
|
|
132
|
+
const stat = statSync(full);
|
|
133
|
+
if (stat.isDirectory())
|
|
134
|
+
walkDir(full);
|
|
135
|
+
else if (extname(entry) === '.css')
|
|
136
|
+
cssFiles.push(full);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
walkDir(absDir);
|
|
140
|
+
if (cssFiles.length === 0) {
|
|
141
|
+
throw new Error(`No CSS files found in ${absDir}`);
|
|
142
|
+
}
|
|
143
|
+
// Read and merge all CSS
|
|
144
|
+
let totalLines = 0;
|
|
145
|
+
let allCss = '';
|
|
146
|
+
for (const file of cssFiles) {
|
|
147
|
+
const content = readFileSync(file, 'utf-8');
|
|
148
|
+
totalLines += content.split('\n').length;
|
|
149
|
+
allCss += content + '\n';
|
|
150
|
+
}
|
|
151
|
+
// Extract colors
|
|
152
|
+
const colorMap = extractColorsFromCss(allCss);
|
|
153
|
+
const colors = [];
|
|
154
|
+
for (const [value, { rgb, count }] of colorMap) {
|
|
155
|
+
const lum = relativeLuminance(rgb[0], rgb[1], rgb[2]);
|
|
156
|
+
colors.push({ value, rgb, luminance: lum, count, role: inferColorRole(rgb, lum) });
|
|
157
|
+
}
|
|
158
|
+
colors.sort((a, b) => b.count - a.count);
|
|
159
|
+
// Classify
|
|
160
|
+
const backgrounds = colors.filter(c => c.role === 'background');
|
|
161
|
+
const texts = colors.filter(c => c.role === 'text');
|
|
162
|
+
const accents = colors.filter(c => c.role === 'accent');
|
|
163
|
+
const darkestBg = backgrounds.length > 0
|
|
164
|
+
? backgrounds.reduce((a, b) => a.luminance < b.luminance ? a : b)
|
|
165
|
+
: null;
|
|
166
|
+
const lightestBg = backgrounds.length > 0
|
|
167
|
+
? backgrounds.reduce((a, b) => a.luminance > b.luminance ? a : b)
|
|
168
|
+
: null;
|
|
169
|
+
const primaryText = texts.length > 0
|
|
170
|
+
? texts.reduce((a, b) => b.count > a.count ? b : a)
|
|
171
|
+
: null;
|
|
172
|
+
// Detect patterns
|
|
173
|
+
const patterns = detectPatterns(allCss);
|
|
174
|
+
const analysis = {
|
|
175
|
+
sourceDir: absDir,
|
|
176
|
+
cssFiles: cssFiles.map(f => f.replace(absDir + '/', '').replace(absDir + '\\', '')),
|
|
177
|
+
totalLines,
|
|
178
|
+
colors: colors.slice(0, 20), // top 20
|
|
179
|
+
darkestBg,
|
|
180
|
+
lightestBg,
|
|
181
|
+
primaryText,
|
|
182
|
+
accents: accents.slice(0, 5), // top 5 accents
|
|
183
|
+
suggestedTemplate: suggestTemplate(patterns),
|
|
184
|
+
sectionCount: patterns.sectionCount,
|
|
185
|
+
hasHero: patterns.hasHero,
|
|
186
|
+
hasGrid: patterns.hasGrid,
|
|
187
|
+
hasForm: patterns.hasForm,
|
|
188
|
+
};
|
|
189
|
+
return {
|
|
190
|
+
analysis,
|
|
191
|
+
customTokensCss: generateCustomTokens(analysis),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=spool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spool.js","sourceRoot":"","sources":["../../src/core/spool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hale-bopp/valentino-engine",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Antifragile Open Source UI Design Engine — generates Runtime PageSpec JSON, validates accessibility, enforces Design Tokens, and consults GEDI for architectural decisions.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"types": "./dist/cockpit-server.d.ts",
|
|
27
27
|
"import": "./dist/cockpit-server.js"
|
|
28
28
|
},
|
|
29
|
+
"./css/tokens.css": "./css/tokens.css",
|
|
29
30
|
"./css/framework.base.css": "./css/framework.base.css",
|
|
30
31
|
"./css/framework.corporate.css": "./css/framework.corporate.css",
|
|
31
32
|
"./css/framework.landing.css": "./css/framework.landing.css"
|