themebooth 0.1.0 → 0.2.1
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/README.md +19 -6
- package/dist/bin/themebooth.js +26 -1
- package/dist/bin/themebooth.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +4 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/preset.d.ts +2 -0
- package/dist/cli/preset.d.ts.map +1 -0
- package/dist/cli/preset.js +135 -0
- package/dist/cli/preset.js.map +1 -0
- package/dist/core/computed.d.ts +4 -0
- package/dist/core/computed.d.ts.map +1 -0
- package/dist/core/computed.js +58 -0
- package/dist/core/computed.js.map +1 -0
- package/dist/core/inheritance.d.ts +3 -0
- package/dist/core/inheritance.d.ts.map +1 -0
- package/dist/core/inheritance.js +97 -0
- package/dist/core/inheritance.js.map +1 -0
- package/dist/core/manifest.d.ts +97 -12
- package/dist/core/manifest.d.ts.map +1 -1
- package/dist/core/manifest.js +25 -23
- package/dist/core/manifest.js.map +1 -1
- package/dist/core/overlay.d.ts +41 -0
- package/dist/core/overlay.d.ts.map +1 -0
- package/dist/core/overlay.js +78 -0
- package/dist/core/overlay.js.map +1 -0
- package/dist/core/schemas.d.ts +21 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/schemas.js +82 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/transpiler.d.ts +1 -1
- package/dist/core/transpiler.d.ts.map +1 -1
- package/dist/core/transpiler.js +149 -8
- package/dist/core/transpiler.js.map +1 -1
- package/dist/core/variables.d.ts +2 -5
- package/dist/core/variables.d.ts.map +1 -1
- package/dist/core/variables.js +19 -23
- package/dist/core/variables.js.map +1 -1
- package/dist/exporters/atom.d.ts +15 -0
- package/dist/exporters/atom.d.ts.map +1 -0
- package/dist/exporters/atom.js +45 -0
- package/dist/exporters/atom.js.map +1 -0
- package/dist/exporters/brackets.d.ts +4 -0
- package/dist/exporters/brackets.d.ts.map +1 -0
- package/dist/exporters/brackets.js +71 -0
- package/dist/exporters/brackets.js.map +1 -0
- package/dist/exporters/schemas.d.ts +219 -0
- package/dist/exporters/schemas.d.ts.map +1 -0
- package/dist/exporters/schemas.js +69 -0
- package/dist/exporters/schemas.js.map +1 -0
- package/dist/exporters/sublime.d.ts +17 -0
- package/dist/exporters/sublime.d.ts.map +1 -0
- package/dist/exporters/sublime.js +41 -0
- package/dist/exporters/sublime.js.map +1 -0
- package/dist/exporters/utils.d.ts +8 -0
- package/dist/exporters/utils.d.ts.map +1 -0
- package/dist/exporters/utils.js +35 -0
- package/dist/exporters/utils.js.map +1 -0
- package/dist/exporters/vim.d.ts +18 -0
- package/dist/exporters/vim.d.ts.map +1 -0
- package/dist/exporters/vim.js +89 -0
- package/dist/exporters/vim.js.map +1 -0
- package/dist/exporters/vscode.d.ts.map +1 -1
- package/dist/exporters/vscode.js +8 -20
- package/dist/exporters/vscode.js.map +1 -1
- package/dist/exporters/zed.d.ts.map +1 -1
- package/dist/exporters/zed.js +24 -18
- package/dist/exporters/zed.js.map +1 -1
- package/dist/templates/presets/dark.json +1 -10
- package/dist/templates/presets/high-contrast.json +1 -10
- package/dist/templates/presets/light.json +1 -10
- package/dist/utils/validation.js +3 -3
- package/dist/utils/validation.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -21,13 +21,14 @@ Creates a project with `manifest.json` (your theme definition) and a live previe
|
|
|
21
21
|
|
|
22
22
|
### 2. Define your theme
|
|
23
23
|
|
|
24
|
-
Edit `manifest.json` with your color palette and syntax rules. Define colors once as variables, reuse them everywhere:
|
|
24
|
+
Edit `manifest.json` with your color palette and syntax rules. Define colors once as variables, reuse them everywhere. Computed colors let you derive variations automatically:
|
|
25
25
|
|
|
26
26
|
```json
|
|
27
27
|
{
|
|
28
28
|
"name": "Ocean Dream",
|
|
29
29
|
"description": "A cool, calm syntax theme",
|
|
30
30
|
"author": "you@example.com",
|
|
31
|
+
"version": "1.0.0",
|
|
31
32
|
"variables": {
|
|
32
33
|
"bg": "#0d1117",
|
|
33
34
|
"fg": "#c9d1d9",
|
|
@@ -36,19 +37,24 @@ Edit `manifest.json` with your color palette and syntax rules. Define colors onc
|
|
|
36
37
|
"string": "#a371f7",
|
|
37
38
|
"comment": "#8b949e"
|
|
38
39
|
},
|
|
40
|
+
"computed": {
|
|
41
|
+
"accent_dark": { "base": "$accent", "transform": "darken", "amount": 20 },
|
|
42
|
+
"error_dark": { "base": "$error", "transform": "darken", "amount": 15 }
|
|
43
|
+
},
|
|
39
44
|
"colors": {
|
|
40
|
-
"background": "$bg",
|
|
41
|
-
"foreground": "$fg"
|
|
45
|
+
"editor.background": "$bg",
|
|
46
|
+
"editor.foreground": "$fg",
|
|
47
|
+
"editorError.foreground": "$error_dark"
|
|
42
48
|
},
|
|
43
49
|
"tokens": {
|
|
44
|
-
"keyword": { "foreground": "$
|
|
50
|
+
"keyword": { "foreground": "$accent", "fontStyle": "bold" },
|
|
45
51
|
"string": { "foreground": "$string" },
|
|
46
52
|
"comment": { "foreground": "$comment", "fontStyle": "italic" }
|
|
47
53
|
}
|
|
48
54
|
}
|
|
49
55
|
```
|
|
50
56
|
|
|
51
|
-
Use `$variableName` anywhere in the file. Change a color once, updates everywhere.
|
|
57
|
+
Use `$variableName` anywhere in the file. Change a color once, updates everywhere. Add computed colors for automatic variations.
|
|
52
58
|
|
|
53
59
|
### 3. Preview live changes
|
|
54
60
|
|
|
@@ -90,9 +96,14 @@ Each command guides you through marketplace login and submission.
|
|
|
90
96
|
- **3 editors**: VS Code, Notepad++, Zed
|
|
91
97
|
- **Single JSON theme definition** (no per-editor config files in v1)
|
|
92
98
|
- **Color variables** (`$colorName`) for DRY theming—define once, reuse everywhere
|
|
99
|
+
- **Computed colors** (darken, lighten, alpha transforms)—derive colors from variables at build time
|
|
100
|
+
- **Theme inheritance** (`extends`)—compose themes by extending parent manifests
|
|
101
|
+
- **Semantic token styling**—language-aware syntax highlighting alongside TextMate scopes
|
|
102
|
+
- **Language-specific tokens**—customize highlighting per programming language
|
|
103
|
+
- **Preset system**—offer theme variants (dark/light, bold/soft) to users
|
|
93
104
|
- **Live HTML preview** with code samples
|
|
94
105
|
- **One-command packaging** to editor-native formats
|
|
95
|
-
- **
|
|
106
|
+
- **Interactive preset wizard**—`themebooth preset add` to create and manage presets
|
|
96
107
|
|
|
97
108
|
## How it works
|
|
98
109
|
|
|
@@ -155,7 +166,9 @@ Changes to `manifest.json` reload automatically.
|
|
|
155
166
|
| Command | Purpose |
|
|
156
167
|
|---------|---------|
|
|
157
168
|
| `themebooth init [name]` | Create new theme project |
|
|
169
|
+
| `themebooth init [name] --preset [dark\|light\|high-contrast]` | Create with starter preset |
|
|
158
170
|
| `themebooth preview` | Live preview with hot-reload |
|
|
171
|
+
| `themebooth preset add` | Interactive wizard to create theme variants |
|
|
159
172
|
| `themebooth package` | Package for all platforms |
|
|
160
173
|
| `themebooth publish <platform>` | Publish to marketplace |
|
|
161
174
|
|
package/dist/bin/themebooth.js
CHANGED
|
@@ -2,15 +2,19 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
5
7
|
const init_1 = require("../cli/init");
|
|
6
8
|
const preview_1 = require("../cli/preview");
|
|
7
9
|
const package_1 = require("../cli/package");
|
|
8
10
|
const publish_1 = require("../cli/publish");
|
|
11
|
+
const preset_1 = require("../cli/preset");
|
|
12
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, "../../package.json"), "utf-8"));
|
|
9
13
|
const program = new commander_1.Command();
|
|
10
14
|
program
|
|
11
15
|
.name("themebooth")
|
|
12
16
|
.description("Create syntax themes once, publish to VS Code, Notepad++, and Zed")
|
|
13
|
-
.version(
|
|
17
|
+
.version(packageJson.version, "-v, --version");
|
|
14
18
|
program
|
|
15
19
|
.command("init [name]")
|
|
16
20
|
.description("Initialize a new theme project")
|
|
@@ -96,6 +100,27 @@ Examples:
|
|
|
96
100
|
process.exit(1);
|
|
97
101
|
}
|
|
98
102
|
});
|
|
103
|
+
const presetCmd = program
|
|
104
|
+
.command("preset")
|
|
105
|
+
.description("Manage theme presets");
|
|
106
|
+
presetCmd
|
|
107
|
+
.command("add")
|
|
108
|
+
.description("Interactively add a named preset to manifest.json")
|
|
109
|
+
.addHelpText("after", `
|
|
110
|
+
Prompts for a preset name then walks through each variable,
|
|
111
|
+
allowing per-variable overrides. Press Enter to keep current value.
|
|
112
|
+
|
|
113
|
+
Examples:
|
|
114
|
+
$ themebooth preset add
|
|
115
|
+
`)
|
|
116
|
+
.action(async () => {
|
|
117
|
+
try {
|
|
118
|
+
await (0, preset_1.presetAddCommand)();
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
99
124
|
program.parse(process.argv);
|
|
100
125
|
if (!process.argv.slice(2).length) {
|
|
101
126
|
program.outputHelp();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"themebooth.js","sourceRoot":"","sources":["../../src/bin/themebooth.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,sCAA0C;AAC1C,4CAAgD;AAChD,4CAAgD;AAChD,4CAAgD;
|
|
1
|
+
{"version":3,"file":"themebooth.js","sourceRoot":"","sources":["../../src/bin/themebooth.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAkUA,wBAAsB,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFxF"}
|
package/dist/cli/init.js
CHANGED
|
@@ -113,7 +113,10 @@ const CUSTOM_MANIFEST = {
|
|
|
113
113
|
foreground: "$builtin",
|
|
114
114
|
},
|
|
115
115
|
},
|
|
116
|
-
|
|
116
|
+
semanticTokens: {},
|
|
117
|
+
languageTokens: {},
|
|
118
|
+
presets: {},
|
|
119
|
+
computed: {},
|
|
117
120
|
};
|
|
118
121
|
async function loadPresetsFromFiles() {
|
|
119
122
|
const presetsDir = path.join(__dirname, "../templates/presets");
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/cli/preset.ts"],"names":[],"mappings":"AAqCA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoFtD"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.presetAddCommand = presetAddCommand;
|
|
37
|
+
const readline = __importStar(require("readline"));
|
|
38
|
+
const manifest_1 = require("../core/manifest");
|
|
39
|
+
const schemas_1 = require("../core/schemas");
|
|
40
|
+
const paths_1 = require("../utils/paths");
|
|
41
|
+
const logger_1 = require("../utils/logger");
|
|
42
|
+
function createReadlineInterface() {
|
|
43
|
+
return readline.createInterface({
|
|
44
|
+
input: process.stdin,
|
|
45
|
+
output: process.stdout,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async function promptWithDefault(rl, prompt, defaultValue) {
|
|
49
|
+
return new Promise((resolve) => {
|
|
50
|
+
const displayPrompt = defaultValue ? `${prompt} [${defaultValue}]: ` : `${prompt}: `;
|
|
51
|
+
rl.question(displayPrompt, (answer) => {
|
|
52
|
+
const trimmed = answer.trim();
|
|
53
|
+
resolve(trimmed === "" ? defaultValue : trimmed);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function buildPresetFromOverrides(variables, overrides) {
|
|
58
|
+
return {
|
|
59
|
+
variableOverrides: Object.keys(overrides).length > 0 ? overrides : undefined,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async function presetAddCommand() {
|
|
63
|
+
try {
|
|
64
|
+
// Get manifest paths
|
|
65
|
+
const paths = (0, paths_1.getThemeProjectPaths)(process.cwd());
|
|
66
|
+
const manifestData = await (0, paths_1.readManifest)(paths.manifest);
|
|
67
|
+
// Validate current manifest
|
|
68
|
+
const validation = (0, manifest_1.validateManifest)(manifestData);
|
|
69
|
+
if (!validation.success) {
|
|
70
|
+
logger_1.logger.error("Current manifest is invalid:");
|
|
71
|
+
validation.errors.forEach((err) => {
|
|
72
|
+
logger_1.logger.error(` • ${err.field}: ${err.message}`);
|
|
73
|
+
});
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
const manifest = validation.data;
|
|
77
|
+
// Create readline interface
|
|
78
|
+
const rl = createReadlineInterface();
|
|
79
|
+
// Prompt for preset name
|
|
80
|
+
let presetName = "";
|
|
81
|
+
while (!presetName) {
|
|
82
|
+
presetName = await promptWithDefault(rl, "Preset name", "");
|
|
83
|
+
if (!presetName) {
|
|
84
|
+
logger_1.logger.warn("Preset name cannot be empty");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Check if preset already exists
|
|
88
|
+
if (manifest.presets && manifest.presets[presetName]) {
|
|
89
|
+
const overwrite = await promptWithDefault(rl, `Preset "${presetName}" already exists. Overwrite? (y/n)`, "n");
|
|
90
|
+
if (overwrite.toLowerCase() !== "y") {
|
|
91
|
+
rl.close();
|
|
92
|
+
logger_1.logger.info("Cancelled.");
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Walk through each variable and prompt for overrides
|
|
97
|
+
const overrides = {};
|
|
98
|
+
const sortedVars = Object.entries(manifest.variables).sort(([a], [b]) => a.localeCompare(b));
|
|
99
|
+
logger_1.logger.info(`\nConfiguring preset "${presetName}":`);
|
|
100
|
+
logger_1.logger.info("Press Enter to keep current value, or type a new value.\n");
|
|
101
|
+
for (const [varName, currentValue] of sortedVars) {
|
|
102
|
+
const newValue = await promptWithDefault(rl, ` ${varName}`, currentValue);
|
|
103
|
+
// Only collect if different from current
|
|
104
|
+
if (newValue !== currentValue) {
|
|
105
|
+
// Validate the value
|
|
106
|
+
if (!schemas_1.colorOrVariableRegex.test(newValue)) {
|
|
107
|
+
logger_1.logger.warn(`⚠ "${newValue}" is not a valid color or variable. Skipping.`);
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
overrides[varName] = newValue;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
rl.close();
|
|
114
|
+
// Build the preset
|
|
115
|
+
const preset = buildPresetFromOverrides(manifest.variables, overrides);
|
|
116
|
+
// Update raw manifest and write back
|
|
117
|
+
const rawManifest = (await (0, paths_1.readManifest)(paths.manifest));
|
|
118
|
+
if (!rawManifest.presets) {
|
|
119
|
+
rawManifest.presets = {};
|
|
120
|
+
}
|
|
121
|
+
rawManifest.presets[presetName] = preset;
|
|
122
|
+
await (0, paths_1.writeManifest)(paths.manifest, rawManifest);
|
|
123
|
+
if (Object.keys(overrides).length > 0) {
|
|
124
|
+
logger_1.logger.success(`✓ Preset "${presetName}" added with ${Object.keys(overrides).length} variable override(s)`);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
logger_1.logger.success(`✓ Preset "${presetName}" added (no variable overrides)`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
logger_1.logger.error(`Failed to add preset: ${error instanceof Error ? error.message : String(error)}`);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=preset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../../src/cli/preset.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,4CAoFC;AAzHD,mDAAqC;AAErC,+CAA4D;AAC5D,6CAAuD;AACvD,0CAAmF;AACnF,4CAAyC;AAEzC,SAAS,uBAAuB;IAC9B,OAAO,QAAQ,CAAC,eAAe,CAAC;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,EAAsB,EACtB,MAAc,EACd,YAAoB;IAEpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;QACrF,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;YACpC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAC/B,SAAiC,EACjC,SAAiC;IAEjC,OAAO;QACL,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAC7E,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,KAAK,GAAG,IAAA,4BAAoB,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,MAAM,IAAA,oBAAY,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAExD,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAA,2BAAgB,EAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,eAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC7C,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChC,eAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;QAEjC,4BAA4B;QAC5B,MAAM,EAAE,GAAG,uBAAuB,EAAE,CAAC;QAErC,yBAAyB;QACzB,IAAI,UAAU,GAAW,EAAE,CAAC;QAC5B,OAAO,CAAC,UAAU,EAAE,CAAC;YACnB,UAAU,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,eAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACrD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,WAAW,UAAU,oCAAoC,EAAE,GAAG,CAAC,CAAC;YAC9G,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACpC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,eAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC1B,OAAO;YACT,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7F,eAAM,CAAC,IAAI,CAAC,yBAAyB,UAAU,IAAI,CAAC,CAAC;QACrD,eAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAEzE,KAAK,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,UAAU,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,KAAK,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;YAE3E,yCAAyC;YACzC,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC9B,qBAAqB;gBACrB,IAAI,CAAC,8BAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACzC,eAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,+CAA+C,CAAC,CAAC;oBAC3E,SAAS;gBACX,CAAC;gBACD,SAAS,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;YAChC,CAAC;QACH,CAAC;QAED,EAAE,CAAC,KAAK,EAAE,CAAC;QAEX,mBAAmB;QACnB,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEvE,qCAAqC;QACrC,MAAM,WAAW,GAAG,CAAC,MAAM,IAAA,oBAAY,EAAC,KAAK,CAAC,QAAQ,CAAC,CAA4B,CAAC;QACpF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;QAC3B,CAAC;QACA,WAAW,CAAC,OAAmC,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;QAEtE,MAAM,IAAA,qBAAa,EAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,eAAM,CAAC,OAAO,CAAC,aAAa,UAAU,gBAAgB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,uBAAuB,CAAC,CAAC;QAC9G,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,OAAO,CAAC,aAAa,UAAU,iCAAiC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ComputedEntry } from "./manifest";
|
|
2
|
+
export declare function applyColorTransform(hexColor: string, transform: "darken" | "lighten" | "alpha", amount: number): string;
|
|
3
|
+
export declare function resolveComputedColors(computed: Record<string, ComputedEntry>, resolvedVariables: Record<string, string>): Record<string, string>;
|
|
4
|
+
//# sourceMappingURL=computed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../../src/core/computed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,EACzC,MAAM,EAAE,MAAM,GACb,MAAM,CAoBR;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACvC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkCxB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.applyColorTransform = applyColorTransform;
|
|
7
|
+
exports.resolveComputedColors = resolveComputedColors;
|
|
8
|
+
const color_1 = __importDefault(require("color"));
|
|
9
|
+
function applyColorTransform(hexColor, transform, amount) {
|
|
10
|
+
// amount is in 0-100 scale; convert to 0-1 ratio for color operations
|
|
11
|
+
const ratio = amount / 100;
|
|
12
|
+
try {
|
|
13
|
+
const color = (0, color_1.default)(hexColor);
|
|
14
|
+
switch (transform) {
|
|
15
|
+
case "darken":
|
|
16
|
+
return color.darken(ratio).hex();
|
|
17
|
+
case "lighten":
|
|
18
|
+
return color.lighten(ratio).hex();
|
|
19
|
+
case "alpha":
|
|
20
|
+
return color.alpha(ratio).hexa();
|
|
21
|
+
default:
|
|
22
|
+
throw new Error(`Unknown transform: ${transform}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
throw new Error(`Failed to apply ${transform} transform to ${hexColor}: ${String(error)}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function resolveComputedColors(computed, resolvedVariables) {
|
|
30
|
+
const result = { ...resolvedVariables };
|
|
31
|
+
for (const [computedName, entry] of Object.entries(computed)) {
|
|
32
|
+
let baseColor;
|
|
33
|
+
// Resolve base value
|
|
34
|
+
if (entry.base.startsWith("$")) {
|
|
35
|
+
const varName = entry.base.slice(1); // Remove the $
|
|
36
|
+
// Look in both original variables and newly computed colors
|
|
37
|
+
if (varName in result) {
|
|
38
|
+
baseColor = result[varName];
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
throw new Error(`Computed color "${computedName}" references undefined variable "${varName}"`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Treat as literal hex color
|
|
46
|
+
baseColor = entry.base;
|
|
47
|
+
// Validate it's a valid hex
|
|
48
|
+
if (!/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$/.test(baseColor)) {
|
|
49
|
+
throw new Error(`Computed color "${computedName}" has invalid base value "${entry.base}" (not a variable or hex color)`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Apply transform
|
|
53
|
+
const computedColor = applyColorTransform(baseColor, entry.transform, entry.amount);
|
|
54
|
+
result[computedName] = computedColor;
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=computed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/core/computed.ts"],"names":[],"mappings":";;;;;AAGA,kDAwBC;AAED,sDAqCC;AAlED,kDAA0B;AAG1B,SAAgB,mBAAmB,CACjC,QAAgB,EAChB,SAAyC,EACzC,MAAc;IAEd,sEAAsE;IACtE,MAAM,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,CAAC;QAE9B,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;YACnC,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;YACpC,KAAK,OAAO;gBACV,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC;gBACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,SAAS,iBAAiB,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,SAAgB,qBAAqB,CACnC,QAAuC,EACvC,iBAAyC;IAEzC,MAAM,MAAM,GAAG,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAExC,KAAK,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,IAAI,SAAiB,CAAC;QAEtB,qBAAqB;QACrB,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;YACpD,4DAA4D;YAC5D,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBACtB,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,mBAAmB,YAAY,oCAAoC,OAAO,GAAG,CAC9E,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;YACvB,4BAA4B;YAC5B,IAAI,CAAC,mDAAmD,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzE,MAAM,IAAI,KAAK,CACb,mBAAmB,YAAY,6BAA6B,KAAK,CAAC,IAAI,iCAAiC,CACxG,CAAC;YACJ,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,aAAa,GAAG,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACpF,MAAM,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function deepMergeManifests(parent: Record<string, unknown>, child: Record<string, unknown>): Record<string, unknown>;
|
|
2
|
+
export declare function resolveInheritance(manifestPath: string, seen?: Set<string>): Promise<Record<string, unknown>>;
|
|
3
|
+
//# sourceMappingURL=inheritance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inheritance.d.ts","sourceRoot":"","sources":["../../src/core/inheritance.ts"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+BzB;AAcD,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2BlC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.deepMergeManifests = deepMergeManifests;
|
|
37
|
+
exports.resolveInheritance = resolveInheritance;
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
function deepMergeManifests(parent, child) {
|
|
41
|
+
const result = { ...parent };
|
|
42
|
+
for (const [key, childValue] of Object.entries(child)) {
|
|
43
|
+
// Strip `extends` from output (it's a build-time directive)
|
|
44
|
+
if (key === "extends") {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const parentValue = result[key];
|
|
48
|
+
// Both are plain objects (not arrays or null) → recurse
|
|
49
|
+
if (typeof parentValue === "object" &&
|
|
50
|
+
parentValue !== null &&
|
|
51
|
+
!Array.isArray(parentValue) &&
|
|
52
|
+
typeof childValue === "object" &&
|
|
53
|
+
childValue !== null &&
|
|
54
|
+
!Array.isArray(childValue)) {
|
|
55
|
+
result[key] = deepMergeManifests(parentValue, childValue);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Child wins: scalar, array, or type mismatch
|
|
59
|
+
result[key] = childValue;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
async function loadRawManifest(filePath) {
|
|
65
|
+
try {
|
|
66
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
67
|
+
return JSON.parse(content);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
71
|
+
throw new Error(`Manifest file not found: ${filePath}`);
|
|
72
|
+
}
|
|
73
|
+
throw new Error(`Failed to load manifest from ${filePath}: ${String(error)}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async function resolveInheritance(manifestPath, seen) {
|
|
77
|
+
if (!seen) {
|
|
78
|
+
seen = new Set();
|
|
79
|
+
}
|
|
80
|
+
const resolvedPath = path.resolve(manifestPath);
|
|
81
|
+
if (seen.has(resolvedPath)) {
|
|
82
|
+
throw new Error(`Circular inheritance detected: ${[...seen].join(" → ")} → ${resolvedPath}`);
|
|
83
|
+
}
|
|
84
|
+
seen.add(resolvedPath);
|
|
85
|
+
const manifestData = await loadRawManifest(resolvedPath);
|
|
86
|
+
// If no extends, return as-is
|
|
87
|
+
if (!manifestData.extends || typeof manifestData.extends !== "string") {
|
|
88
|
+
return manifestData;
|
|
89
|
+
}
|
|
90
|
+
// Resolve parent path relative to this manifest's directory
|
|
91
|
+
const parentPath = path.resolve(path.dirname(resolvedPath), manifestData.extends);
|
|
92
|
+
// Recursively load parent chain
|
|
93
|
+
const parentData = await resolveInheritance(parentPath, new Set(seen));
|
|
94
|
+
// Merge: parent first, then apply this manifest on top
|
|
95
|
+
return deepMergeManifests(parentData, manifestData);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=inheritance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inheritance.js","sourceRoot":"","sources":["../../src/core/inheritance.ts"],"names":[],"mappings":"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"}
|