@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 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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"}
@@ -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;AAE1D,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;QACI,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBnB,CAAC,CAAC;AACH,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.5.0",
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"