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.
Files changed (74) hide show
  1. package/README.md +19 -6
  2. package/dist/bin/themebooth.js +26 -1
  3. package/dist/bin/themebooth.js.map +1 -1
  4. package/dist/cli/init.d.ts.map +1 -1
  5. package/dist/cli/init.js +4 -1
  6. package/dist/cli/init.js.map +1 -1
  7. package/dist/cli/preset.d.ts +2 -0
  8. package/dist/cli/preset.d.ts.map +1 -0
  9. package/dist/cli/preset.js +135 -0
  10. package/dist/cli/preset.js.map +1 -0
  11. package/dist/core/computed.d.ts +4 -0
  12. package/dist/core/computed.d.ts.map +1 -0
  13. package/dist/core/computed.js +58 -0
  14. package/dist/core/computed.js.map +1 -0
  15. package/dist/core/inheritance.d.ts +3 -0
  16. package/dist/core/inheritance.d.ts.map +1 -0
  17. package/dist/core/inheritance.js +97 -0
  18. package/dist/core/inheritance.js.map +1 -0
  19. package/dist/core/manifest.d.ts +97 -12
  20. package/dist/core/manifest.d.ts.map +1 -1
  21. package/dist/core/manifest.js +25 -23
  22. package/dist/core/manifest.js.map +1 -1
  23. package/dist/core/overlay.d.ts +41 -0
  24. package/dist/core/overlay.d.ts.map +1 -0
  25. package/dist/core/overlay.js +78 -0
  26. package/dist/core/overlay.js.map +1 -0
  27. package/dist/core/schemas.d.ts +21 -0
  28. package/dist/core/schemas.d.ts.map +1 -0
  29. package/dist/core/schemas.js +82 -0
  30. package/dist/core/schemas.js.map +1 -0
  31. package/dist/core/transpiler.d.ts +1 -1
  32. package/dist/core/transpiler.d.ts.map +1 -1
  33. package/dist/core/transpiler.js +149 -8
  34. package/dist/core/transpiler.js.map +1 -1
  35. package/dist/core/variables.d.ts +2 -5
  36. package/dist/core/variables.d.ts.map +1 -1
  37. package/dist/core/variables.js +19 -23
  38. package/dist/core/variables.js.map +1 -1
  39. package/dist/exporters/atom.d.ts +15 -0
  40. package/dist/exporters/atom.d.ts.map +1 -0
  41. package/dist/exporters/atom.js +45 -0
  42. package/dist/exporters/atom.js.map +1 -0
  43. package/dist/exporters/brackets.d.ts +4 -0
  44. package/dist/exporters/brackets.d.ts.map +1 -0
  45. package/dist/exporters/brackets.js +71 -0
  46. package/dist/exporters/brackets.js.map +1 -0
  47. package/dist/exporters/schemas.d.ts +219 -0
  48. package/dist/exporters/schemas.d.ts.map +1 -0
  49. package/dist/exporters/schemas.js +69 -0
  50. package/dist/exporters/schemas.js.map +1 -0
  51. package/dist/exporters/sublime.d.ts +17 -0
  52. package/dist/exporters/sublime.d.ts.map +1 -0
  53. package/dist/exporters/sublime.js +41 -0
  54. package/dist/exporters/sublime.js.map +1 -0
  55. package/dist/exporters/utils.d.ts +8 -0
  56. package/dist/exporters/utils.d.ts.map +1 -0
  57. package/dist/exporters/utils.js +35 -0
  58. package/dist/exporters/utils.js.map +1 -0
  59. package/dist/exporters/vim.d.ts +18 -0
  60. package/dist/exporters/vim.d.ts.map +1 -0
  61. package/dist/exporters/vim.js +89 -0
  62. package/dist/exporters/vim.js.map +1 -0
  63. package/dist/exporters/vscode.d.ts.map +1 -1
  64. package/dist/exporters/vscode.js +8 -20
  65. package/dist/exporters/vscode.js.map +1 -1
  66. package/dist/exporters/zed.d.ts.map +1 -1
  67. package/dist/exporters/zed.js +24 -18
  68. package/dist/exporters/zed.js.map +1 -1
  69. package/dist/templates/presets/dark.json +1 -10
  70. package/dist/templates/presets/high-contrast.json +1 -10
  71. package/dist/templates/presets/light.json +1 -10
  72. package/dist/utils/validation.js +3 -3
  73. package/dist/utils/validation.js.map +1 -1
  74. 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": "$error", "fontStyle": "bold" },
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
- - **Built-in syntax presets** (light, dark, high contrast templates)
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
 
@@ -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("0.1.0");
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;AAGhD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,mEAAmE,CAAC;KAChF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,uBAAuB,EAAE,2CAA2C,EAAE,MAAM,CAAC;KACpF,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;GAUrB,CAAC;KACD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,IAAI,CAAC;QACH,MAAM,IAAA,kBAAW,EAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,WAAW,CAAC,OAAO,EAAE;;;;;;;GAOrB,CAAC;KACD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAA,wBAAc,GAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,2DAA2D,CAAC;KACxE,WAAW,CAAC,OAAO,EAAE;;;;;;;GAOrB,CAAC;KACD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAA,wBAAc,GAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,uDAAuD,CAAC;KACpE,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;GAYrB,CAAC;KACD,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IACzB,IAAI,CAAC;QACH,MAAM,IAAA,wBAAc,EAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"themebooth.js","sourceRoot":"","sources":["../../src/bin/themebooth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AA+TA,wBAAsB,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFxF"}
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
- presets: [],
116
+ semanticTokens: {},
117
+ languageTokens: {},
118
+ presets: {},
119
+ computed: {},
117
120
  };
118
121
  async function loadPresetsFromFiles() {
119
122
  const presetsDir = path.join(__dirname, "../templates/presets");
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function presetAddCommand(): Promise<void>;
2
+ //# sourceMappingURL=preset.d.ts.map
@@ -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":"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"}
@@ -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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"}