paintoliver 0.1.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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/dist/analyzer/index.d.ts +20 -0
  4. package/dist/analyzer/index.d.ts.map +1 -0
  5. package/dist/analyzer/index.js +387 -0
  6. package/dist/analyzer/index.js.map +1 -0
  7. package/dist/cli.d.ts +26 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +436 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/contrast/index.d.ts +88 -0
  12. package/dist/contrast/index.d.ts.map +1 -0
  13. package/dist/contrast/index.js +314 -0
  14. package/dist/contrast/index.js.map +1 -0
  15. package/dist/paintoliver.bundle.js +14530 -0
  16. package/dist/reporter/index.d.ts +43 -0
  17. package/dist/reporter/index.d.ts.map +1 -0
  18. package/dist/reporter/index.js +235 -0
  19. package/dist/reporter/index.js.map +1 -0
  20. package/dist/transformer/css-var-transformer.d.ts +46 -0
  21. package/dist/transformer/css-var-transformer.d.ts.map +1 -0
  22. package/dist/transformer/css-var-transformer.js +422 -0
  23. package/dist/transformer/css-var-transformer.js.map +1 -0
  24. package/dist/transformer/index.d.ts +17 -0
  25. package/dist/transformer/index.d.ts.map +1 -0
  26. package/dist/transformer/index.js +213 -0
  27. package/dist/transformer/index.js.map +1 -0
  28. package/dist/transformer/tailwind-transformer.d.ts +47 -0
  29. package/dist/transformer/tailwind-transformer.d.ts.map +1 -0
  30. package/dist/transformer/tailwind-transformer.js +402 -0
  31. package/dist/transformer/tailwind-transformer.js.map +1 -0
  32. package/dist/utils/backup.d.ts +41 -0
  33. package/dist/utils/backup.d.ts.map +1 -0
  34. package/dist/utils/backup.js +125 -0
  35. package/dist/utils/backup.js.map +1 -0
  36. package/dist/vibes/definitions/brutalist.d.ts +11 -0
  37. package/dist/vibes/definitions/brutalist.d.ts.map +1 -0
  38. package/dist/vibes/definitions/brutalist.js +203 -0
  39. package/dist/vibes/definitions/brutalist.js.map +1 -0
  40. package/dist/vibes/definitions/corporate.d.ts +12 -0
  41. package/dist/vibes/definitions/corporate.d.ts.map +1 -0
  42. package/dist/vibes/definitions/corporate.js +212 -0
  43. package/dist/vibes/definitions/corporate.js.map +1 -0
  44. package/dist/vibes/definitions/glassmorphism.d.ts +20 -0
  45. package/dist/vibes/definitions/glassmorphism.d.ts.map +1 -0
  46. package/dist/vibes/definitions/glassmorphism.js +217 -0
  47. package/dist/vibes/definitions/glassmorphism.js.map +1 -0
  48. package/dist/vibes/definitions/kinetic-terminal.d.ts +20 -0
  49. package/dist/vibes/definitions/kinetic-terminal.d.ts.map +1 -0
  50. package/dist/vibes/definitions/kinetic-terminal.js +242 -0
  51. package/dist/vibes/definitions/kinetic-terminal.js.map +1 -0
  52. package/dist/vibes/definitions/minimal.d.ts +11 -0
  53. package/dist/vibes/definitions/minimal.d.ts.map +1 -0
  54. package/dist/vibes/definitions/minimal.js +167 -0
  55. package/dist/vibes/definitions/minimal.js.map +1 -0
  56. package/dist/vibes/definitions/windows-xp.d.ts +12 -0
  57. package/dist/vibes/definitions/windows-xp.d.ts.map +1 -0
  58. package/dist/vibes/definitions/windows-xp.js +229 -0
  59. package/dist/vibes/definitions/windows-xp.js.map +1 -0
  60. package/dist/vibes/registry.d.ts +25 -0
  61. package/dist/vibes/registry.d.ts.map +1 -0
  62. package/dist/vibes/registry.js +52 -0
  63. package/dist/vibes/registry.js.map +1 -0
  64. package/dist/vibes/types.d.ts +428 -0
  65. package/dist/vibes/types.d.ts.map +1 -0
  66. package/dist/vibes/types.js +12 -0
  67. package/dist/vibes/types.js.map +1 -0
  68. package/package.json +41 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Change Reporter
3
+ *
4
+ * Formats transformation results into human-readable output for the CLI.
5
+ * Also generates machine-readable JSON reports that can be committed
6
+ * alongside code changes for review.
7
+ *
8
+ * The reporter separates:
9
+ * - What changed (diffs and descriptions)
10
+ * - What was skipped and why
11
+ * - Warnings that need developer attention
12
+ * - Errors that prevented full transformation
13
+ */
14
+ import type { TransformationResult, ProjectAnalysis, Vibe } from "../vibes/types.js";
15
+ /**
16
+ * Print a summary of the project analysis to stdout.
17
+ */
18
+ export declare function printAnalysisReport(analysis: ProjectAnalysis, vibe: Vibe): void;
19
+ /**
20
+ * Print a full transformation report to stdout.
21
+ */
22
+ export declare function printTransformationReport(result: TransformationResult, verbose: boolean, dryRun: boolean): void;
23
+ /**
24
+ * Write a machine-readable JSON report to disk.
25
+ * This can be committed alongside the changes for PR review.
26
+ */
27
+ export declare function writeJSONReport(result: TransformationResult, outputPath: string): void;
28
+ /**
29
+ * Print a formatted list of available vibes.
30
+ */
31
+ export declare function printVibeList(vibes: Vibe[]): void;
32
+ /**
33
+ * Validate that a set of changes is safe to apply.
34
+ *
35
+ * Returns an array of issues. An empty array means all checks passed.
36
+ * Fatal issues prevent the transformation from running.
37
+ */
38
+ export interface ValidationIssue {
39
+ level: "error" | "warning";
40
+ message: string;
41
+ }
42
+ export declare function validateTransformation(analysis: ProjectAnalysis, _vibe: Vibe): ValidationIssue[];
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAc,eAAe,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAqCjG;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CA+B/E;AAID;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,GACd,IAAI,CA4EN;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,oBAAoB,EAC5B,UAAU,EAAE,MAAM,GACjB,IAAI,CAMN;AAID;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAajD;AAID;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,IAAI,GACV,eAAe,EAAE,CAqDnB"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Change Reporter
3
+ *
4
+ * Formats transformation results into human-readable output for the CLI.
5
+ * Also generates machine-readable JSON reports that can be committed
6
+ * alongside code changes for review.
7
+ *
8
+ * The reporter separates:
9
+ * - What changed (diffs and descriptions)
10
+ * - What was skipped and why
11
+ * - Warnings that need developer attention
12
+ * - Errors that prevented full transformation
13
+ */
14
+ import fs from "fs";
15
+ import path from "path";
16
+ // ─── ANSI Color Helpers ───────────────────────────────────────────────────────
17
+ const RESET = "\x1b[0m";
18
+ const BOLD = "\x1b[1m";
19
+ const DIM = "\x1b[2m";
20
+ const GREEN = "\x1b[32m";
21
+ const YELLOW = "\x1b[33m";
22
+ const RED = "\x1b[31m";
23
+ const CYAN = "\x1b[36m";
24
+ const BLUE = "\x1b[34m";
25
+ const MAGENTA = "\x1b[35m";
26
+ const GRAY = "\x1b[90m";
27
+ const c = {
28
+ bold: (s) => `${BOLD}${s}${RESET}`,
29
+ dim: (s) => `${DIM}${s}${RESET}`,
30
+ green: (s) => `${GREEN}${s}${RESET}`,
31
+ yellow: (s) => `${YELLOW}${s}${RESET}`,
32
+ red: (s) => `${RED}${s}${RESET}`,
33
+ cyan: (s) => `${CYAN}${s}${RESET}`,
34
+ blue: (s) => `${BLUE}${s}${RESET}`,
35
+ magenta: (s) => `${MAGENTA}${s}${RESET}`,
36
+ gray: (s) => `${GRAY}${s}${RESET}`,
37
+ };
38
+ // ─── Confidence Badge ─────────────────────────────────────────────────────────
39
+ function confidenceBadge(score) {
40
+ if (score >= 0.90)
41
+ return c.dim(`[${score.toFixed(2)}]`);
42
+ if (score >= 0.65)
43
+ return c.yellow(`[${score.toFixed(2)}]`);
44
+ return c.red(`[${score.toFixed(2)}]`);
45
+ }
46
+ // ─── Analysis Report ──────────────────────────────────────────────────────────
47
+ /**
48
+ * Print a summary of the project analysis to stdout.
49
+ */
50
+ export function printAnalysisReport(analysis, vibe) {
51
+ console.log("");
52
+ console.log(c.bold(" ┌─ FrontEnd Agent ───────────────────────────────────────────┐"));
53
+ console.log(c.bold(" │") + c.cyan(c.bold(" Project Analysis ")) + c.bold("│"));
54
+ console.log(c.bold(" └────────────────────────────────────────────────────────────┘"));
55
+ console.log("");
56
+ const row = (label, value) => {
57
+ const pad = 20;
58
+ console.log(` ${c.dim(label.padEnd(pad))} ${value}`);
59
+ };
60
+ row("Root", analysis.rootPath);
61
+ row("Framework", analysis.framework);
62
+ row("Styling system", analysis.stylingSystem);
63
+ row("Theme mode", analysis.themeMode);
64
+ row("CSS entry points", analysis.cssEntryPoints.length.toString());
65
+ row("CSS variables found", analysis.detectedCSSVars.length.toString());
66
+ row("Files to process", analysis.relevantFiles.length.toString());
67
+ row("Has token file", analysis.hasTokenFile ? "yes" : "no");
68
+ row("Vibe to apply", `${c.magenta(vibe.meta.name)} — ${vibe.meta.description}`);
69
+ if (analysis.warnings.length > 0) {
70
+ console.log("");
71
+ console.log(` ${c.yellow("⚠")} Warnings:`);
72
+ for (const w of analysis.warnings) {
73
+ console.log(` ${c.yellow("·")} ${w}`);
74
+ }
75
+ }
76
+ console.log("");
77
+ }
78
+ // ─── Transformation Report ────────────────────────────────────────────────────
79
+ /**
80
+ * Print a full transformation report to stdout.
81
+ */
82
+ export function printTransformationReport(result, verbose, dryRun) {
83
+ const dryRunBadge = dryRun ? c.yellow(" [DRY RUN — no files written] ") : "";
84
+ console.log("");
85
+ console.log(c.bold(" ┌─────────────────────────────────────────────────────────────┐"));
86
+ console.log(c.bold(" │") +
87
+ (result.success ? c.green(c.bold(" ✓ Transformation Complete")) : c.red(c.bold(" ✗ Transformation Failed"))) +
88
+ dryRunBadge +
89
+ c.bold("│"));
90
+ console.log(c.bold(" └─────────────────────────────────────────────────────────────┘"));
91
+ console.log("");
92
+ console.log(` ${result.summary}`);
93
+ console.log("");
94
+ // Errors first
95
+ if (result.errors.length > 0) {
96
+ console.log(` ${c.red(c.bold("Errors"))}`);
97
+ for (const e of result.errors) {
98
+ console.log(` ${c.red("✗")} ${e}`);
99
+ }
100
+ console.log("");
101
+ }
102
+ // Changes — grouped by file
103
+ if (result.changes.length > 0) {
104
+ const byFile = groupByFile(result.changes);
105
+ console.log(` ${c.bold("Changes")}`);
106
+ for (const [filePath, fileChanges] of byFile) {
107
+ const relPath = path.relative(result.projectRoot, filePath);
108
+ console.log(` ${c.cyan("·")} ${c.bold(relPath)}`);
109
+ for (const change of fileChanges) {
110
+ const icon = changeIcon(change);
111
+ const conf = change.confidence !== undefined ? confidenceBadge(change.confidence) : "";
112
+ console.log(` ${icon} ${change.description}${conf ? " " + conf : ""}`);
113
+ if (verbose && change.before && change.after) {
114
+ console.log(c.gray(` before: ${change.before.slice(0, 80)}`));
115
+ console.log(c.gray(` after: ${change.after.slice(0, 80)}`));
116
+ }
117
+ }
118
+ }
119
+ console.log("");
120
+ }
121
+ // Skipped
122
+ if (result.skipped.length > 0 && verbose) {
123
+ console.log(` ${c.bold("Skipped")}`);
124
+ for (const s of result.skipped) {
125
+ const relPath = path.relative(result.projectRoot, s.filePath);
126
+ console.log(` ${c.dim("○")} ${relPath} ${c.dim("—")} ${c.dim(s.reason)}`);
127
+ }
128
+ console.log("");
129
+ }
130
+ // Warnings
131
+ if (result.warnings.length > 0) {
132
+ console.log(` ${c.yellow(c.bold("Warnings"))}`);
133
+ for (const w of result.warnings) {
134
+ console.log(` ${c.yellow("⚠")} ${w}`);
135
+ }
136
+ console.log("");
137
+ }
138
+ // Timing
139
+ const ms = Date.parse(result.completedAt) - Date.parse(result.startedAt);
140
+ console.log(c.dim(` Completed in ${ms}ms`));
141
+ console.log("");
142
+ }
143
+ // ─── JSON Report ──────────────────────────────────────────────────────────────
144
+ /**
145
+ * Write a machine-readable JSON report to disk.
146
+ * This can be committed alongside the changes for PR review.
147
+ */
148
+ export function writeJSONReport(result, outputPath) {
149
+ const dir = path.dirname(outputPath);
150
+ if (!fs.existsSync(dir)) {
151
+ fs.mkdirSync(dir, { recursive: true });
152
+ }
153
+ fs.writeFileSync(outputPath, JSON.stringify(result, null, 2), "utf-8");
154
+ }
155
+ // ─── Vibe Listing ─────────────────────────────────────────────────────────────
156
+ /**
157
+ * Print a formatted list of available vibes.
158
+ */
159
+ export function printVibeList(vibes) {
160
+ console.log("");
161
+ console.log(c.bold(" Available vibes:"));
162
+ console.log("");
163
+ for (const vibe of vibes) {
164
+ const darkBadge = vibe.meta.darkModeFirst ? c.dim(" [dark]") : c.dim(" [light]");
165
+ console.log(` ${c.cyan(c.bold(vibe.meta.id.padEnd(18)))} ${vibe.meta.description}${darkBadge}`);
166
+ console.log(` ${" ".repeat(18)} ${c.dim("Tags: " + vibe.meta.tags.join(", "))}`);
167
+ console.log("");
168
+ }
169
+ }
170
+ export function validateTransformation(analysis, _vibe) {
171
+ const issues = [];
172
+ // Check: project root exists
173
+ if (!analysis.rootPath) {
174
+ issues.push({ level: "error", message: "Project root path is not set." });
175
+ }
176
+ // Check: at least some relevant files were found
177
+ if (analysis.relevantFiles.length === 0) {
178
+ issues.push({
179
+ level: "error",
180
+ message: "No styling files found in this project. " +
181
+ "Make sure the path is correct and the project has CSS/Tailwind files.",
182
+ });
183
+ }
184
+ // Check: unknown styling system
185
+ if (analysis.stylingSystem === "unknown") {
186
+ issues.push({
187
+ level: "warning",
188
+ message: "Styling system is unknown. The agent will scan for CSS files only. " +
189
+ "Some transformation features may be limited.",
190
+ });
191
+ }
192
+ // Check: CSS-in-JS
193
+ if (analysis.stylingSystem === "styled-components" ||
194
+ analysis.stylingSystem === "emotion") {
195
+ issues.push({
196
+ level: "warning",
197
+ message: `CSS-in-JS (${analysis.stylingSystem}) detected. ` +
198
+ "Transformation will be limited to CSS custom properties. " +
199
+ "styled() template literals and css`` blocks will not be modified.",
200
+ });
201
+ }
202
+ // Check: no CSS entry points
203
+ if (analysis.cssEntryPoints.length === 0) {
204
+ issues.push({
205
+ level: "warning",
206
+ message: "No CSS entry point found. The agent will create a new tokens.css file. " +
207
+ "You will need to import it manually.",
208
+ });
209
+ }
210
+ return issues;
211
+ }
212
+ // ─── Utilities ────────────────────────────────────────────────────────────────
213
+ function groupByFile(changes) {
214
+ const map = new Map();
215
+ for (const change of changes) {
216
+ if (!map.has(change.filePath))
217
+ map.set(change.filePath, []);
218
+ map.get(change.filePath).push(change);
219
+ }
220
+ return map;
221
+ }
222
+ function changeIcon(change) {
223
+ switch (change.kind) {
224
+ case "css-var-updated": return c.green("↺");
225
+ case "css-var-added": return c.green("+");
226
+ case "tailwind-config-updated": return c.blue("↺");
227
+ case "class-replaced": return c.magenta("↺");
228
+ case "font-import-added": return c.cyan("+");
229
+ case "custom-property-injected": return c.cyan("+");
230
+ case "file-created": return c.green("✚");
231
+ case "skipped": return c.dim("○");
232
+ default: return c.dim("·");
233
+ }
234
+ }
235
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * CSS Custom Property Transformer
3
+ *
4
+ * Reads CSS/SCSS files, identifies CSS custom properties that correspond to
5
+ * semantic color/typography/spacing roles, and rewrites their values to match
6
+ * the target vibe.
7
+ *
8
+ * This transformer is conservative:
9
+ * - It only rewrites variables whose names it can confidently map to vibe tokens.
10
+ * - It never deletes variables.
11
+ * - It never changes the structure of the file — only values after the colon.
12
+ * - It records every change for the reporter.
13
+ */
14
+ import type { FileChange, Vibe } from "../vibes/types.js";
15
+ /**
16
+ * Given a file's CSS content, rewrite any CSS custom property values that
17
+ * match the vibe's semantic tokens.
18
+ *
19
+ * Returns the modified content and an array of changes made.
20
+ */
21
+ export declare function transformCSSVars(content: string, filePath: string, vibe: Vibe): {
22
+ content: string;
23
+ changes: FileChange[];
24
+ };
25
+ /**
26
+ * Generate a complete CSS token file from a vibe.
27
+ *
28
+ * Emits three blocks:
29
+ * 1. :root {} — base tokens (the vibe's default mode)
30
+ * 2. @media (prefers-color-scheme: <opposite>) — system-level mode switch
31
+ * 3. .dark / .light class selector — explicit class-based mode switch
32
+ *
33
+ * Only emits blocks 2 and 3 when the vibe defines a mode override.
34
+ * The override block lists only the tokens that differ from the base,
35
+ * which is intentional: everything unchanged is inherited from :root.
36
+ */
37
+ export declare function generateTokenBlock(vibe: Vibe): string;
38
+ /**
39
+ * Transform a CSS file on disk.
40
+ * Returns null if the file could not be read or nothing changed.
41
+ */
42
+ export declare function transformCSSFile(filePath: string, vibe: Vibe, dryRun: boolean): {
43
+ changes: FileChange[];
44
+ modified: boolean;
45
+ };
46
+ //# sourceMappingURL=css-var-transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-var-transformer.d.ts","sourceRoot":"","sources":["../../src/transformer/css-var-transformer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAgB,IAAI,EAAE,MAAM,mBAAmB,CAAC;AA6GxE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,GACT;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAA;CAAE,CA+F5C;AAuCD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAkGrD;AA8FD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,OAAO,GACd;IAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAiB9C"}