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.
- package/LICENSE +21 -0
- package/README.md +207 -0
- package/dist/analyzer/index.d.ts +20 -0
- package/dist/analyzer/index.d.ts.map +1 -0
- package/dist/analyzer/index.js +387 -0
- package/dist/analyzer/index.js.map +1 -0
- package/dist/cli.d.ts +26 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +436 -0
- package/dist/cli.js.map +1 -0
- package/dist/contrast/index.d.ts +88 -0
- package/dist/contrast/index.d.ts.map +1 -0
- package/dist/contrast/index.js +314 -0
- package/dist/contrast/index.js.map +1 -0
- package/dist/paintoliver.bundle.js +14530 -0
- package/dist/reporter/index.d.ts +43 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +235 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/transformer/css-var-transformer.d.ts +46 -0
- package/dist/transformer/css-var-transformer.d.ts.map +1 -0
- package/dist/transformer/css-var-transformer.js +422 -0
- package/dist/transformer/css-var-transformer.js.map +1 -0
- package/dist/transformer/index.d.ts +17 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +213 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/tailwind-transformer.d.ts +47 -0
- package/dist/transformer/tailwind-transformer.d.ts.map +1 -0
- package/dist/transformer/tailwind-transformer.js +402 -0
- package/dist/transformer/tailwind-transformer.js.map +1 -0
- package/dist/utils/backup.d.ts +41 -0
- package/dist/utils/backup.d.ts.map +1 -0
- package/dist/utils/backup.js +125 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/vibes/definitions/brutalist.d.ts +11 -0
- package/dist/vibes/definitions/brutalist.d.ts.map +1 -0
- package/dist/vibes/definitions/brutalist.js +203 -0
- package/dist/vibes/definitions/brutalist.js.map +1 -0
- package/dist/vibes/definitions/corporate.d.ts +12 -0
- package/dist/vibes/definitions/corporate.d.ts.map +1 -0
- package/dist/vibes/definitions/corporate.js +212 -0
- package/dist/vibes/definitions/corporate.js.map +1 -0
- package/dist/vibes/definitions/glassmorphism.d.ts +20 -0
- package/dist/vibes/definitions/glassmorphism.d.ts.map +1 -0
- package/dist/vibes/definitions/glassmorphism.js +217 -0
- package/dist/vibes/definitions/glassmorphism.js.map +1 -0
- package/dist/vibes/definitions/kinetic-terminal.d.ts +20 -0
- package/dist/vibes/definitions/kinetic-terminal.d.ts.map +1 -0
- package/dist/vibes/definitions/kinetic-terminal.js +242 -0
- package/dist/vibes/definitions/kinetic-terminal.js.map +1 -0
- package/dist/vibes/definitions/minimal.d.ts +11 -0
- package/dist/vibes/definitions/minimal.d.ts.map +1 -0
- package/dist/vibes/definitions/minimal.js +167 -0
- package/dist/vibes/definitions/minimal.js.map +1 -0
- package/dist/vibes/definitions/windows-xp.d.ts +12 -0
- package/dist/vibes/definitions/windows-xp.d.ts.map +1 -0
- package/dist/vibes/definitions/windows-xp.js +229 -0
- package/dist/vibes/definitions/windows-xp.js.map +1 -0
- package/dist/vibes/registry.d.ts +25 -0
- package/dist/vibes/registry.d.ts.map +1 -0
- package/dist/vibes/registry.js +52 -0
- package/dist/vibes/registry.js.map +1 -0
- package/dist/vibes/types.d.ts +428 -0
- package/dist/vibes/types.d.ts.map +1 -0
- package/dist/vibes/types.js +12 -0
- package/dist/vibes/types.js.map +1 -0
- 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"}
|