@hale-bopp/valentino-engine 2.5.1 โ†’ 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.
@@ -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.1",
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",