design-brain-memory 0.8.2 → 0.9.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.
Files changed (126) hide show
  1. package/dist/agentBrowser.d.ts +1 -0
  2. package/dist/agentBrowser.js +1 -0
  3. package/dist/agentBrowser.js.map +1 -1
  4. package/dist/classify.d.ts +21 -0
  5. package/dist/classify.js +205 -0
  6. package/dist/classify.js.map +1 -0
  7. package/dist/cli.js +216 -219
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands.d.ts +1 -60
  10. package/dist/commands.js +10 -322
  11. package/dist/commands.js.map +1 -1
  12. package/dist/extractFromUrl.d.ts +0 -7
  13. package/dist/extractFromUrl.js +353 -82
  14. package/dist/extractFromUrl.js.map +1 -1
  15. package/dist/index.d.ts +12 -24
  16. package/dist/index.js +11 -16
  17. package/dist/index.js.map +1 -1
  18. package/dist/llm.d.ts +6 -0
  19. package/dist/llm.js +12 -1
  20. package/dist/llm.js.map +1 -1
  21. package/dist/persona.d.ts +2 -0
  22. package/dist/persona.js +234 -0
  23. package/dist/persona.js.map +1 -0
  24. package/dist/query.js +6 -1
  25. package/dist/query.js.map +1 -1
  26. package/dist/render.d.ts +10 -2
  27. package/dist/render.js +175 -80
  28. package/dist/render.js.map +1 -1
  29. package/dist/scan.d.ts +10 -0
  30. package/dist/scan.js +393 -0
  31. package/dist/scan.js.map +1 -0
  32. package/dist/scanRenderer.d.ts +2 -0
  33. package/dist/scanRenderer.js +155 -0
  34. package/dist/scanRenderer.js.map +1 -0
  35. package/dist/skillPrompt.d.ts +3 -1
  36. package/dist/skillPrompt.js +148 -22
  37. package/dist/skillPrompt.js.map +1 -1
  38. package/dist/store.d.ts +5 -1
  39. package/dist/store.js +19 -0
  40. package/dist/store.js.map +1 -1
  41. package/dist/taste.d.ts +9 -0
  42. package/dist/taste.js +598 -0
  43. package/dist/taste.js.map +1 -0
  44. package/dist/tasteDiff.d.ts +19 -0
  45. package/dist/tasteDiff.js +340 -0
  46. package/dist/tasteDiff.js.map +1 -0
  47. package/dist/tasteGenerate.d.ts +12 -0
  48. package/dist/tasteGenerate.js +140 -0
  49. package/dist/tasteGenerate.js.map +1 -0
  50. package/dist/tasteRefine.d.ts +13 -0
  51. package/dist/tasteRefine.js +351 -0
  52. package/dist/tasteRefine.js.map +1 -0
  53. package/dist/tasteRenderer.d.ts +4 -0
  54. package/dist/tasteRenderer.js +133 -0
  55. package/dist/tasteRenderer.js.map +1 -0
  56. package/dist/theatrical.d.ts +5 -0
  57. package/dist/theatrical.js +258 -0
  58. package/dist/theatrical.js.map +1 -0
  59. package/dist/types.d.ts +196 -27
  60. package/package.json +4 -3
  61. package/skills/SKILL.md +36 -0
  62. package/skills/design-brain/SKILL.md +77 -0
  63. package/README.md +0 -242
  64. package/dist/aggregate.d.ts +0 -9
  65. package/dist/aggregate.js +0 -53
  66. package/dist/aggregate.js.map +0 -1
  67. package/dist/batch.d.ts +0 -16
  68. package/dist/batch.js +0 -44
  69. package/dist/batch.js.map +0 -1
  70. package/dist/compare.d.ts +0 -33
  71. package/dist/compare.js +0 -83
  72. package/dist/compare.js.map +0 -1
  73. package/dist/componentGraph.d.ts +0 -22
  74. package/dist/componentGraph.js +0 -106
  75. package/dist/componentGraph.js.map +0 -1
  76. package/dist/contextLayer.d.ts +0 -12
  77. package/dist/contextLayer.js +0 -263
  78. package/dist/contextLayer.js.map +0 -1
  79. package/dist/cssInJs.d.ts +0 -9
  80. package/dist/cssInJs.js +0 -124
  81. package/dist/cssInJs.js.map +0 -1
  82. package/dist/graphView.d.ts +0 -21
  83. package/dist/graphView.js +0 -492
  84. package/dist/graphView.js.map +0 -1
  85. package/dist/knowledge.d.ts +0 -20
  86. package/dist/knowledge.js +0 -208
  87. package/dist/knowledge.js.map +0 -1
  88. package/dist/liveView.d.ts +0 -15
  89. package/dist/liveView.js +0 -476
  90. package/dist/liveView.js.map +0 -1
  91. package/dist/moodboard.d.ts +0 -3
  92. package/dist/moodboard.js +0 -139
  93. package/dist/moodboard.js.map +0 -1
  94. package/dist/reviewChecklist.d.ts +0 -17
  95. package/dist/reviewChecklist.js +0 -126
  96. package/dist/reviewChecklist.js.map +0 -1
  97. package/dist/scorecard.d.ts +0 -48
  98. package/dist/scorecard.js +0 -201
  99. package/dist/scorecard.js.map +0 -1
  100. package/dist/styleDictionary.d.ts +0 -16
  101. package/dist/styleDictionary.js +0 -89
  102. package/dist/styleDictionary.js.map +0 -1
  103. package/dist/svg.d.ts +0 -5
  104. package/dist/svg.js +0 -162
  105. package/dist/svg.js.map +0 -1
  106. package/dist/systemDiff.d.ts +0 -28
  107. package/dist/systemDiff.js +0 -107
  108. package/dist/systemDiff.js.map +0 -1
  109. package/dist/tailwind.d.ts +0 -2
  110. package/dist/tailwind.js +0 -122
  111. package/dist/tailwind.js.map +0 -1
  112. package/dist/tokenNaming.d.ts +0 -5
  113. package/dist/tokenNaming.js +0 -229
  114. package/dist/tokenNaming.js.map +0 -1
  115. package/dist/tokens.d.ts +0 -17
  116. package/dist/tokens.js +0 -44
  117. package/dist/tokens.js.map +0 -1
  118. package/dist/trends.d.ts +0 -12
  119. package/dist/trends.js +0 -178
  120. package/dist/trends.js.map +0 -1
  121. package/dist/wiki.d.ts +0 -10
  122. package/dist/wiki.js +0 -346
  123. package/dist/wiki.js.map +0 -1
  124. package/dist/writingStyle.d.ts +0 -38
  125. package/dist/writingStyle.js +0 -224
  126. package/dist/writingStyle.js.map +0 -1
package/dist/moodboard.js DELETED
@@ -1,139 +0,0 @@
1
- import { aggregateColors, aggregateTypography, aggregateComponents, aggregateMotion } from './aggregate.js';
2
- export function generateMoodboardHtml(project) {
3
- if (project.inspirations.length === 0) {
4
- return `<!DOCTYPE html>
5
- <html lang="en"><head><meta charset="utf-8"><title>${project.name} Moodboard</title>
6
- <style>body{font-family:system-ui,sans-serif;background:#111;color:#fff;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0}
7
- .empty{text-align:center;opacity:0.5}</style></head>
8
- <body><div class="empty"><h1>${project.name}</h1><p>No captures yet. Run <code>design-brain-memory ingest</code> to start.</p></div></body></html>`;
9
- }
10
- const colors = aggregateColors(project.inspirations).slice(0, 10);
11
- const typography = aggregateTypography(project.inspirations).slice(0, 3);
12
- const components = aggregateComponents(project.inspirations).slice(0, 6);
13
- const motion = aggregateMotion(project.inspirations);
14
- const avgDuration = motion.length > 0
15
- ? (motion.reduce((sum, m) => {
16
- const dur = (m.transitions ?? []).map((t) => parseFloat(t.duration) || 0);
17
- return sum + (dur.length > 0 ? dur.reduce((a, b) => a + b, 0) / dur.length : 0);
18
- }, 0) / motion.length).toFixed(2)
19
- : '0';
20
- const topEasing = motion.length > 0
21
- ? (motion.flatMap((m) => (m.transitions ?? []).map((t) => t.timingFunction))
22
- .reduce((acc, fn) => { acc.set(fn, (acc.get(fn) ?? 0) + 1); return acc; }, new Map()))
23
- : new Map();
24
- const topEasingName = topEasing.size > 0
25
- ? [...topEasing.entries()].sort((a, b) => b[1] - a[1])[0][0]
26
- : 'none';
27
- const transitionCount = motion.filter((m) => m.transition && m.transition !== 'none').length;
28
- const animationCount = motion.filter((m) => m.animation && m.animation !== 'none').length;
29
- const colorSwatches = colors.map((c) => `<div class="swatch" style="background:${c.hex}"><span class="hex">${c.hex}</span><span class="freq">${c.count}</span></div>`).join('\n');
30
- const typoSpecimens = typography.map((t) => {
31
- const family = t.fontFamily.split(',')[0].trim().replace(/['"]/g, '');
32
- return `<div class="typo-specimen">
33
- <div class="typo-heading" style="font-family:${t.fontFamily}">${family}</div>
34
- <div class="typo-body" style="font-family:${t.fontFamily};font-size:${t.fontSize};font-weight:${t.fontWeight};line-height:${t.lineHeight}">The quick brown fox jumps over the lazy dog.</div>
35
- <div class="typo-meta">${t.fontSize} / ${t.fontWeight} / ${t.lineHeight}</div>
36
- </div>`;
37
- }).join('\n');
38
- const componentBadges = components.map((c) => `<span class="badge">${c.kind} <small>(${c.count})</small></span>`).join('\n');
39
- const sourceNames = project.inspirations.map((i) => i.name).join(', ');
40
- return `<!DOCTYPE html>
41
- <html lang="en"><head><meta charset="utf-8"><title>${project.name} Moodboard</title>
42
- <style>
43
- *{box-sizing:border-box;margin:0;padding:0}
44
- body{font-family:system-ui,-apple-system,sans-serif;background:#0a0a0a;color:#e0e0e0;padding:2rem}
45
- h1{font-size:1.8rem;font-weight:700;margin-bottom:.5rem}
46
- h2{font-size:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:#888;margin-bottom:1rem;border-bottom:1px solid #222;padding-bottom:.5rem}
47
- .grid{display:grid;grid-template-columns:1fr 1fr;gap:2rem;max-width:1200px;margin:0 auto}
48
- .section{background:#141414;border-radius:12px;padding:1.5rem;border:1px solid #222}
49
- .section.full{grid-column:1/3}
50
- .palette{display:flex;gap:.5rem;flex-wrap:wrap}
51
- .swatch{width:80px;height:80px;border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding:6px;position:relative;overflow:hidden}
52
- .swatch::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,transparent 40%,rgba(0,0,0,.5));pointer-events:none}
53
- .hex{font-size:10px;font-weight:600;z-index:1;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.8)}
54
- .freq{font-size:9px;z-index:1;color:rgba(255,255,255,.7)}
55
- .typo-specimen{margin-bottom:1.5rem}
56
- .typo-heading{font-size:1.5rem;font-weight:700;margin-bottom:.25rem}
57
- .typo-body{margin-bottom:.25rem;color:#aaa}
58
- .typo-meta{font-size:.75rem;color:#555}
59
- .badge{display:inline-block;background:#1a1a2e;border:1px solid #333;border-radius:20px;padding:6px 14px;margin:4px;font-size:.85rem}
60
- .badge small{color:#666}
61
- .motion-stat{display:flex;gap:2rem;flex-wrap:wrap}
62
- .motion-stat div{text-align:center}
63
- .motion-stat .val{font-size:1.5rem;font-weight:700;color:#fff}
64
- .motion-stat .lbl{font-size:.75rem;color:#666}
65
- .footer{text-align:center;margin-top:2rem;color:#444;font-size:.75rem}
66
- </style></head>
67
- <body>
68
- <div class="grid">
69
- <div class="section full"><h1>${project.name}</h1><p style="color:#666;margin-top:.25rem">Moodboard &mdash; ${project.inspirations.length} capture${project.inspirations.length !== 1 ? 's' : ''}</p></div>
70
- <div class="section full"><h2>Color Palette</h2><div class="palette">${colorSwatches}</div></div>
71
- <div class="section"><h2>Typography</h2>${typoSpecimens || '<p style="color:#555">No typography captured</p>'}</div>
72
- <div class="section"><h2>Components</h2><div>${componentBadges || '<p style="color:#555">No components captured</p>'}</div></div>
73
- <div class="section full"><h2>Motion</h2><div class="motion-stat">
74
- <div><div class="val">${avgDuration}s</div><div class="lbl">Avg Duration</div></div>
75
- <div><div class="val">${topEasingName}</div><div class="lbl">Top Easing</div></div>
76
- <div><div class="val">${transitionCount}</div><div class="lbl">Transitions</div></div>
77
- <div><div class="val">${animationCount}</div><div class="lbl">Animations</div></div>
78
- </div></div>
79
- <div class="section full"><div class="footer">Sources: ${sourceNames} &mdash; Generated by design-brain-memory</div></div>
80
- </div>
81
- </body></html>`;
82
- }
83
- export function generateMoodboardSvg(project) {
84
- if (project.inspirations.length === 0) {
85
- return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 200"><rect width="800" height="200" fill="#111"/><text x="400" y="100" text-anchor="middle" fill="#666" font-family="system-ui" font-size="16">${project.name} — No captures</text></svg>`;
86
- }
87
- const colors = aggregateColors(project.inspirations).slice(0, 10);
88
- const typography = aggregateTypography(project.inspirations).slice(0, 3);
89
- const components = aggregateComponents(project.inspirations).slice(0, 6);
90
- const W = 800;
91
- let y = 0;
92
- const lines = [];
93
- // Title
94
- y += 40;
95
- lines.push(`<text x="20" y="${y}" fill="#fff" font-family="system-ui" font-size="22" font-weight="700">${project.name}</text>`);
96
- y += 16;
97
- lines.push(`<text x="20" y="${y}" fill="#888" font-family="system-ui" font-size="12">${project.inspirations.length} capture${project.inspirations.length !== 1 ? 's' : ''}</text>`);
98
- y += 30;
99
- // Color swatches
100
- lines.push(`<text x="20" y="${y}" fill="#888" font-family="system-ui" font-size="11" text-transform="uppercase">COLOR PALETTE</text>`);
101
- y += 15;
102
- colors.forEach((c, i) => {
103
- const x = 20 + i * 72;
104
- lines.push(`<rect x="${x}" y="${y}" width="64" height="64" rx="6" fill="${c.hex}"/>`);
105
- lines.push(`<text x="${x + 32}" y="${y + 78}" text-anchor="middle" fill="#aaa" font-family="monospace" font-size="9">${c.hex}</text>`);
106
- });
107
- y += 95;
108
- // Typography
109
- lines.push(`<text x="20" y="${y}" fill="#888" font-family="system-ui" font-size="11">TYPOGRAPHY</text>`);
110
- y += 20;
111
- for (const t of typography) {
112
- const family = t.fontFamily.split(',')[0].trim().replace(/['"]/g, '');
113
- lines.push(`<text x="20" y="${y}" fill="#fff" font-family="${t.fontFamily}" font-size="16" font-weight="${t.fontWeight}">${family} — ${t.fontSize}</text>`);
114
- y += 24;
115
- }
116
- y += 15;
117
- // Components
118
- lines.push(`<text x="20" y="${y}" fill="#888" font-family="system-ui" font-size="11">COMPONENTS</text>`);
119
- y += 20;
120
- let cx = 20;
121
- for (const c of components) {
122
- const label = `${c.kind} (${c.count})`;
123
- const w = label.length * 7 + 20;
124
- lines.push(`<rect x="${cx}" y="${y - 14}" width="${w}" height="22" rx="11" fill="none" stroke="#444"/>`);
125
- lines.push(`<text x="${cx + w / 2}" y="${y}" text-anchor="middle" fill="#ccc" font-family="system-ui" font-size="11">${label}</text>`);
126
- cx += w + 8;
127
- if (cx > W - 100) {
128
- cx = 20;
129
- y += 30;
130
- }
131
- }
132
- y += 35;
133
- // Footer
134
- const sourceNames = project.inspirations.map((i) => i.name).join(', ');
135
- lines.push(`<text x="${W / 2}" y="${y}" text-anchor="middle" fill="#555" font-family="system-ui" font-size="10">Sources: ${sourceNames}</text>`);
136
- y += 20;
137
- return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${y}"><rect width="${W}" height="${y}" fill="#0a0a0a"/>${lines.join('')}</svg>`;
138
- }
139
- //# sourceMappingURL=moodboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"moodboard.js","sourceRoot":"","sources":["../src/moodboard.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import type { ProjectRecord } from './types.js';
2
- import type { CodebaseTokens } from './scorecard.js';
3
- export interface ChecklistItem {
4
- category: 'color' | 'typography' | 'component' | 'motion' | 'scorecard';
5
- description: string;
6
- severity: 'info' | 'warning' | 'action';
7
- }
8
- export interface ReviewChecklist {
9
- projectId: string;
10
- items: ChecklistItem[];
11
- generatedAt: string;
12
- }
13
- export declare function buildChecklist(params: {
14
- project: ProjectRecord;
15
- codebaseTokens?: CodebaseTokens;
16
- }): ReviewChecklist;
17
- export declare function renderChecklist(checklist: ReviewChecklist, projectId: string): string;
@@ -1,126 +0,0 @@
1
- import { aggregateColors, aggregateTypography, aggregateComponents, aggregateMotion, } from './aggregate.js';
2
- import { scoreAgainstProject } from './scorecard.js';
3
- export function buildChecklist(params) {
4
- const { project, codebaseTokens } = params;
5
- const items = [];
6
- const colors = aggregateColors(project.inspirations);
7
- if (colors.length > 0) {
8
- items.push({
9
- category: 'color',
10
- description: `Verify primary palette uses top ${Math.min(colors.length, 5)} captured colors: ${colors.slice(0, 5).map((c) => c.hex).join(', ')}`,
11
- severity: 'info',
12
- });
13
- if (colors.length > 20) {
14
- items.push({
15
- category: 'color',
16
- description: `${colors.length} unique colors captured — consider consolidating to reduce palette complexity`,
17
- severity: 'warning',
18
- });
19
- }
20
- }
21
- const typography = aggregateTypography(project.inspirations);
22
- if (typography.length > 0) {
23
- const families = [...new Set(typography.map((t) => t.fontFamily.split(',')[0].trim().replace(/['"]/g, '')))];
24
- items.push({
25
- category: 'typography',
26
- description: `Verify font stack includes: ${families.slice(0, 3).join(', ')}`,
27
- severity: 'info',
28
- });
29
- const sizes = [...new Set(typography.map((t) => t.fontSize))];
30
- if (sizes.length > 8) {
31
- items.push({
32
- category: 'typography',
33
- description: `${sizes.length} unique font sizes — consider establishing a type scale`,
34
- severity: 'warning',
35
- });
36
- }
37
- }
38
- const components = aggregateComponents(project.inspirations);
39
- if (components.length > 0) {
40
- const kinds = [...new Set(components.map((c) => c.kind))];
41
- items.push({
42
- category: 'component',
43
- description: `Component library should cover: ${kinds.slice(0, 8).join(', ')}`,
44
- severity: 'info',
45
- });
46
- }
47
- const motion = aggregateMotion(project.inspirations);
48
- if (motion.length > 0) {
49
- const durations = new Set();
50
- for (const m of motion) {
51
- for (const t of m.transitions ?? []) {
52
- if (t.duration && t.duration !== '0s')
53
- durations.add(t.duration);
54
- }
55
- }
56
- if (durations.size > 0) {
57
- items.push({
58
- category: 'motion',
59
- description: `Standard transition durations: ${[...durations].slice(0, 4).join(', ')}`,
60
- severity: 'info',
61
- });
62
- }
63
- }
64
- if (codebaseTokens) {
65
- const scores = scoreAgainstProject(codebaseTokens, project);
66
- if (scores.colorScore.offPalette > 0) {
67
- items.push({
68
- category: 'scorecard',
69
- description: `${scores.colorScore.offPalette} off-palette color usages found in codebase`,
70
- severity: 'action',
71
- });
72
- for (const detail of scores.colorScore.details.slice(0, 5)) {
73
- items.push({
74
- category: 'scorecard',
75
- description: `Replace off-palette color ${detail.value}`,
76
- severity: 'action',
77
- });
78
- }
79
- }
80
- if (scores.typographyScore.offSystem > 0) {
81
- items.push({
82
- category: 'scorecard',
83
- description: `${scores.typographyScore.offSystem} off-system typography usages found`,
84
- severity: 'action',
85
- });
86
- }
87
- if (scores.motionScore.inconsistent > 0) {
88
- items.push({
89
- category: 'scorecard',
90
- description: `${scores.motionScore.inconsistent} inconsistent motion values found`,
91
- severity: 'warning',
92
- });
93
- }
94
- }
95
- return {
96
- projectId: project.id,
97
- items,
98
- generatedAt: new Date().toISOString(),
99
- };
100
- }
101
- export function renderChecklist(checklist, projectId) {
102
- const lines = [];
103
- lines.push(`# Design Review Checklist — ${projectId}\n`);
104
- lines.push(`Generated: ${checklist.generatedAt}\n`);
105
- const categories = ['color', 'typography', 'component', 'motion', 'scorecard'];
106
- const categoryLabels = {
107
- color: 'Colors',
108
- typography: 'Typography',
109
- component: 'Components',
110
- motion: 'Motion',
111
- scorecard: 'Codebase Audit',
112
- };
113
- for (const category of categories) {
114
- const categoryItems = checklist.items.filter((i) => i.category === category);
115
- if (categoryItems.length === 0)
116
- continue;
117
- lines.push(`## ${categoryLabels[category]}\n`);
118
- for (const item of categoryItems) {
119
- const prefix = item.severity === 'action' ? '- [ ] **ACTION:**' : item.severity === 'warning' ? '- [ ] **WARNING:**' : '- [ ]';
120
- lines.push(`${prefix} ${item.description}`);
121
- }
122
- lines.push('');
123
- }
124
- return lines.join('\n');
125
- }
126
- //# sourceMappingURL=reviewChecklist.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reviewChecklist.js","sourceRoot":"","sources":["../src/reviewChecklist.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import type { ProjectRecord } from './types.js';
2
- export interface CodebaseTokens {
3
- colors: string[];
4
- fontFamilies: string[];
5
- fontSizes: string[];
6
- transitions: string[];
7
- }
8
- export interface ScorecardDetail {
9
- value: string;
10
- file: string;
11
- line: number;
12
- }
13
- export interface ScorecardReport {
14
- filesScanned: number;
15
- colorScore: {
16
- onPalette: number;
17
- offPalette: number;
18
- details: ScorecardDetail[];
19
- };
20
- typographyScore: {
21
- onSystem: number;
22
- offSystem: number;
23
- details: ScorecardDetail[];
24
- };
25
- componentScore: {
26
- covered: number;
27
- missing: number;
28
- coveredKinds: string[];
29
- missingKinds: string[];
30
- };
31
- motionScore: {
32
- consistent: number;
33
- inconsistent: number;
34
- details: ScorecardDetail[];
35
- };
36
- }
37
- export declare function scanCssContent(css: string): CodebaseTokens;
38
- export declare function scanCodebase(scanPath: string): Promise<{
39
- tokens: CodebaseTokens;
40
- filesScanned: number;
41
- }>;
42
- export declare function scoreAgainstProject(codebase: CodebaseTokens, project: ProjectRecord): Omit<ScorecardReport, 'filesScanned'>;
43
- export declare function renderScorecard(report: ScorecardReport, projectId: string): string;
44
- export declare function runScorecard(params: {
45
- rootDir: string;
46
- project: string;
47
- scanPath: string;
48
- }): Promise<string>;
package/dist/scorecard.js DELETED
@@ -1,201 +0,0 @@
1
- import path from 'node:path';
2
- import fs from 'fs-extra';
3
- import { aggregateColors, aggregateTypography, aggregateMotion } from './aggregate.js';
4
- import { projectDir } from './store.js';
5
- const HEX_RE = /#[0-9a-fA-F]{3,8}\b/g;
6
- const RGB_RE = /rgb\([^)]+\)/g;
7
- const FONT_FAMILY_RE = /font-family:\s*([^;]+)/g;
8
- const FONT_SIZE_RE = /font-size:\s*([^;]+)/g;
9
- const TRANSITION_RE = /transition[^:]*:\s*([^;]+)/g;
10
- const SCAN_EXTENSIONS = new Set(['.css', '.scss', '.less', '.html', '.tsx', '.jsx', '.vue', '.svelte']);
11
- export function scanCssContent(css) {
12
- const colors = [];
13
- const fontFamilies = [];
14
- const fontSizes = [];
15
- const transitions = [];
16
- for (const match of css.matchAll(HEX_RE)) {
17
- colors.push(match[0]);
18
- }
19
- for (const match of css.matchAll(RGB_RE)) {
20
- colors.push(match[0]);
21
- }
22
- for (const match of css.matchAll(FONT_FAMILY_RE)) {
23
- fontFamilies.push(match[1].trim());
24
- }
25
- for (const match of css.matchAll(FONT_SIZE_RE)) {
26
- fontSizes.push(match[1].trim());
27
- }
28
- for (const match of css.matchAll(TRANSITION_RE)) {
29
- transitions.push(match[1].trim());
30
- }
31
- return { colors, fontFamilies, fontSizes, transitions };
32
- }
33
- async function collectFiles(dirPath) {
34
- const files = [];
35
- const entries = await fs.readdir(dirPath, { withFileTypes: true });
36
- for (const entry of entries) {
37
- const fullPath = path.join(dirPath, entry.name);
38
- if (entry.isDirectory()) {
39
- if (entry.name === 'node_modules' || entry.name === '.git' || entry.name === 'dist')
40
- continue;
41
- files.push(...await collectFiles(fullPath));
42
- }
43
- else if (SCAN_EXTENSIONS.has(path.extname(entry.name).toLowerCase())) {
44
- files.push(fullPath);
45
- }
46
- }
47
- return files;
48
- }
49
- export async function scanCodebase(scanPath) {
50
- const files = await collectFiles(scanPath);
51
- const merged = { colors: [], fontFamilies: [], fontSizes: [], transitions: [] };
52
- for (const file of files) {
53
- const content = await fs.readFile(file, 'utf-8');
54
- const tokens = scanCssContent(content);
55
- merged.colors.push(...tokens.colors);
56
- merged.fontFamilies.push(...tokens.fontFamilies);
57
- merged.fontSizes.push(...tokens.fontSizes);
58
- merged.transitions.push(...tokens.transitions);
59
- }
60
- return { tokens: merged, filesScanned: files.length };
61
- }
62
- export function scoreAgainstProject(codebase, project) {
63
- // Color scoring
64
- const paletteColors = new Set(aggregateColors(project.inspirations).map((c) => c.hex.toUpperCase()));
65
- let onPalette = 0;
66
- let offPalette = 0;
67
- const colorDetails = [];
68
- for (const color of codebase.colors) {
69
- const normalized = color.toUpperCase().replace(/^#([0-9A-F])([0-9A-F])([0-9A-F])$/, '#$1$1$2$2$3$3');
70
- if (paletteColors.has(normalized)) {
71
- onPalette++;
72
- }
73
- else {
74
- offPalette++;
75
- colorDetails.push({ value: color, file: '', line: 0 });
76
- }
77
- }
78
- // Typography scoring
79
- const systemFonts = new Set(aggregateTypography(project.inspirations).map((t) => t.fontFamily.split(',')[0].trim().replace(/['"]/g, '').toLowerCase()));
80
- const systemSizes = new Set(aggregateTypography(project.inspirations).map((t) => t.fontSize));
81
- let onSystem = 0;
82
- let offSystem = 0;
83
- const typoDetails = [];
84
- for (const family of codebase.fontFamilies) {
85
- const first = family.split(',')[0].trim().replace(/['"]/g, '').toLowerCase();
86
- if (systemFonts.has(first)) {
87
- onSystem++;
88
- }
89
- else {
90
- offSystem++;
91
- typoDetails.push({ value: family, file: '', line: 0 });
92
- }
93
- }
94
- for (const size of codebase.fontSizes) {
95
- if (systemSizes.has(size.trim())) {
96
- onSystem++;
97
- }
98
- else {
99
- offSystem++;
100
- typoDetails.push({ value: size, file: '', line: 0 });
101
- }
102
- }
103
- // Component scoring
104
- const capturedKinds = new Set(project.inspirations.flatMap((i) => i.analysis.components.map((c) => c.kind)));
105
- const coveredKinds = [...capturedKinds];
106
- const missingKinds = [];
107
- // Motion scoring
108
- const capturedDurations = new Set();
109
- const capturedEasings = new Set();
110
- for (const m of aggregateMotion(project.inspirations)) {
111
- for (const t of m.transitions ?? []) {
112
- if (t.duration)
113
- capturedDurations.add(t.duration);
114
- if (t.timingFunction)
115
- capturedEasings.add(t.timingFunction);
116
- }
117
- }
118
- let consistent = 0;
119
- let inconsistent = 0;
120
- const motionDetails = [];
121
- for (const transition of codebase.transitions) {
122
- const durationMatch = transition.match(/(\d+(?:\.\d+)?)(s|ms)/);
123
- if (durationMatch) {
124
- const val = durationMatch[2] === 'ms' ? `${parseFloat(durationMatch[1]) / 1000}s` : `${durationMatch[1]}s`;
125
- if (capturedDurations.has(val)) {
126
- consistent++;
127
- }
128
- else {
129
- inconsistent++;
130
- motionDetails.push({ value: transition, file: '', line: 0 });
131
- }
132
- }
133
- }
134
- return {
135
- colorScore: { onPalette, offPalette, details: colorDetails.slice(0, 20) },
136
- typographyScore: { onSystem, offSystem, details: typoDetails.slice(0, 20) },
137
- componentScore: { covered: coveredKinds.length, missing: missingKinds.length, coveredKinds, missingKinds },
138
- motionScore: { consistent, inconsistent, details: motionDetails.slice(0, 20) },
139
- };
140
- }
141
- function pct(on, off) {
142
- const total = on + off;
143
- if (total === 0)
144
- return 'N/A';
145
- return `${Math.round((on / total) * 100)}%`;
146
- }
147
- export function renderScorecard(report, projectId) {
148
- const colorPct = pct(report.colorScore.onPalette, report.colorScore.offPalette);
149
- const typoPct = pct(report.typographyScore.onSystem, report.typographyScore.offSystem);
150
- const motionPct = pct(report.motionScore.consistent, report.motionScore.inconsistent);
151
- const lines = [
152
- `# Design System Scorecard — ${projectId}\n`,
153
- `Files scanned: ${report.filesScanned}\n`,
154
- '## Scores\n',
155
- '| Category | Score | On-System | Off-System |',
156
- '| --- | --- | --- | --- |',
157
- `| Colors | ${colorPct} | ${report.colorScore.onPalette} | ${report.colorScore.offPalette} |`,
158
- `| Typography | ${typoPct} | ${report.typographyScore.onSystem} | ${report.typographyScore.offSystem} |`,
159
- `| Components | ${report.componentScore.covered} kinds | ${report.componentScore.covered} | ${report.componentScore.missing} |`,
160
- `| Motion | ${motionPct} | ${report.motionScore.consistent} | ${report.motionScore.inconsistent} |`,
161
- '',
162
- ];
163
- if (report.colorScore.details.length > 0) {
164
- lines.push('## Off-Palette Colors\n');
165
- for (const d of report.colorScore.details) {
166
- lines.push(`- \`${d.value}\``);
167
- }
168
- lines.push('');
169
- }
170
- if (report.typographyScore.details.length > 0) {
171
- lines.push('## Off-System Typography\n');
172
- for (const d of report.typographyScore.details) {
173
- lines.push(`- \`${d.value}\``);
174
- }
175
- lines.push('');
176
- }
177
- if (report.motionScore.details.length > 0) {
178
- lines.push('## Inconsistent Motion\n');
179
- for (const d of report.motionScore.details) {
180
- lines.push(`- \`${d.value}\``);
181
- }
182
- lines.push('');
183
- }
184
- return lines.join('\n');
185
- }
186
- export async function runScorecard(params) {
187
- const { loadDatabase } = await import('./store.js');
188
- const db = await loadDatabase(params.rootDir);
189
- const project = db.projects.find((p) => p.id === params.project);
190
- if (!project)
191
- throw new Error(`Project not found: ${params.project}`);
192
- const { tokens, filesScanned } = await scanCodebase(params.scanPath);
193
- const scores = scoreAgainstProject(tokens, project);
194
- const report = { filesScanned, ...scores };
195
- const md = renderScorecard(report, project.id);
196
- const outPath = path.join(projectDir(params.rootDir, project.id), 'scorecard.md');
197
- await fs.ensureDir(path.dirname(outPath));
198
- await fs.writeFile(outPath, md);
199
- return outPath;
200
- }
201
- //# sourceMappingURL=scorecard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scorecard.js","sourceRoot":"","sources":["../src/scorecard.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import type { ProjectRecord } from './types.js';
2
- interface StyleDictionaryToken {
3
- value: string;
4
- type: string;
5
- description?: string;
6
- }
7
- export interface StyleDictionaryOutput {
8
- color: Record<string, StyleDictionaryToken>;
9
- font: {
10
- family: Record<string, StyleDictionaryToken>;
11
- size: Record<string, StyleDictionaryToken>;
12
- };
13
- motion: Record<string, StyleDictionaryToken>;
14
- }
15
- export declare function generateStyleDictionary(project: ProjectRecord): StyleDictionaryOutput;
16
- export {};