themebooth 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 (89) hide show
  1. package/README.md +172 -0
  2. package/dist/bin/themebooth.d.ts +3 -0
  3. package/dist/bin/themebooth.d.ts.map +1 -0
  4. package/dist/bin/themebooth.js +103 -0
  5. package/dist/bin/themebooth.js.map +1 -0
  6. package/dist/cli/init.d.ts +2 -0
  7. package/dist/cli/init.d.ts.map +1 -0
  8. package/dist/cli/init.js +433 -0
  9. package/dist/cli/init.js.map +1 -0
  10. package/dist/cli/package.d.ts +2 -0
  11. package/dist/cli/package.d.ts.map +1 -0
  12. package/dist/cli/package.js +194 -0
  13. package/dist/cli/package.js.map +1 -0
  14. package/dist/cli/preview.d.ts +2 -0
  15. package/dist/cli/preview.d.ts.map +1 -0
  16. package/dist/cli/preview.js +93 -0
  17. package/dist/cli/preview.js.map +1 -0
  18. package/dist/cli/publish.d.ts +2 -0
  19. package/dist/cli/publish.d.ts.map +1 -0
  20. package/dist/cli/publish.js +126 -0
  21. package/dist/cli/publish.js.map +1 -0
  22. package/dist/core/manifest.d.ts +44 -0
  23. package/dist/core/manifest.d.ts.map +1 -0
  24. package/dist/core/manifest.js +101 -0
  25. package/dist/core/manifest.js.map +1 -0
  26. package/dist/core/transpiler.d.ts +13 -0
  27. package/dist/core/transpiler.d.ts.map +1 -0
  28. package/dist/core/transpiler.js +139 -0
  29. package/dist/core/transpiler.js.map +1 -0
  30. package/dist/core/variables.d.ts +33 -0
  31. package/dist/core/variables.d.ts.map +1 -0
  32. package/dist/core/variables.js +155 -0
  33. package/dist/core/variables.js.map +1 -0
  34. package/dist/exporters/notepad-plus.d.ts +3 -0
  35. package/dist/exporters/notepad-plus.d.ts.map +1 -0
  36. package/dist/exporters/notepad-plus.js +90 -0
  37. package/dist/exporters/notepad-plus.js.map +1 -0
  38. package/dist/exporters/vscode.d.ts +11 -0
  39. package/dist/exporters/vscode.d.ts.map +1 -0
  40. package/dist/exporters/vscode.js +34 -0
  41. package/dist/exporters/vscode.js.map +1 -0
  42. package/dist/exporters/zed.d.ts +12 -0
  43. package/dist/exporters/zed.d.ts.map +1 -0
  44. package/dist/exporters/zed.js +48 -0
  45. package/dist/exporters/zed.js.map +1 -0
  46. package/dist/preview/renderer.d.ts +3 -0
  47. package/dist/preview/renderer.d.ts.map +1 -0
  48. package/dist/preview/renderer.js +257 -0
  49. package/dist/preview/renderer.js.map +1 -0
  50. package/dist/preview/server.d.ts +24 -0
  51. package/dist/preview/server.d.ts.map +1 -0
  52. package/dist/preview/server.js +166 -0
  53. package/dist/preview/server.js.map +1 -0
  54. package/dist/preview/watcher.d.ts +9 -0
  55. package/dist/preview/watcher.d.ts.map +1 -0
  56. package/dist/preview/watcher.js +81 -0
  57. package/dist/preview/watcher.js.map +1 -0
  58. package/dist/publish/notepad-plus.d.ts +2 -0
  59. package/dist/publish/notepad-plus.d.ts.map +1 -0
  60. package/dist/publish/notepad-plus.js +151 -0
  61. package/dist/publish/notepad-plus.js.map +1 -0
  62. package/dist/publish/vscode.d.ts +2 -0
  63. package/dist/publish/vscode.d.ts.map +1 -0
  64. package/dist/publish/vscode.js +144 -0
  65. package/dist/publish/vscode.js.map +1 -0
  66. package/dist/publish/zed.d.ts +2 -0
  67. package/dist/publish/zed.d.ts.map +1 -0
  68. package/dist/publish/zed.js +137 -0
  69. package/dist/publish/zed.js.map +1 -0
  70. package/dist/templates/presets/dark.json +53 -0
  71. package/dist/templates/presets/high-contrast.json +54 -0
  72. package/dist/templates/presets/light.json +53 -0
  73. package/dist/utils/logger.d.ts +18 -0
  74. package/dist/utils/logger.d.ts.map +1 -0
  75. package/dist/utils/logger.js +56 -0
  76. package/dist/utils/logger.js.map +1 -0
  77. package/dist/utils/paths.d.ts +32 -0
  78. package/dist/utils/paths.d.ts.map +1 -0
  79. package/dist/utils/paths.js +111 -0
  80. package/dist/utils/paths.js.map +1 -0
  81. package/dist/utils/schema.d.ts +17 -0
  82. package/dist/utils/schema.d.ts.map +1 -0
  83. package/dist/utils/schema.js +80 -0
  84. package/dist/utils/schema.js.map +1 -0
  85. package/dist/utils/validation.d.ts +59 -0
  86. package/dist/utils/validation.d.ts.map +1 -0
  87. package/dist/utils/validation.js +323 -0
  88. package/dist/utils/validation.js.map +1 -0
  89. package/package.json +59 -0
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveVariables = resolveVariables;
4
+ exports.interpolateManifest = interpolateManifest;
5
+ exports.validateVariableReferences = validateVariableReferences;
6
+ /**
7
+ * Resolves all variable references in manifest.
8
+ * Detects circular dependencies and undefined variables.
9
+ */
10
+ function resolveVariables(manifest) {
11
+ const resolvedVariables = {};
12
+ const visiting = new Set();
13
+ const resolved = new Set();
14
+ for (const [name, value] of Object.entries(manifest.variables || {})) {
15
+ const result = resolveVariable(name, value, manifest.variables || {}, visiting, resolved, resolvedVariables);
16
+ if (!result.success) {
17
+ return result;
18
+ }
19
+ }
20
+ return { success: true, variables: resolvedVariables };
21
+ }
22
+ function resolveVariable(name, value, allVariables, visiting, resolved, resolvedVariables) {
23
+ if (resolved.has(name)) {
24
+ return { success: true, variables: resolvedVariables };
25
+ }
26
+ if (visiting.has(name)) {
27
+ const chain = Array.from(visiting);
28
+ chain.push(name);
29
+ return {
30
+ success: false,
31
+ error: {
32
+ variable: name,
33
+ reason: "circular",
34
+ chain,
35
+ message: `Circular variable reference: ${chain.join(" → ")}`,
36
+ },
37
+ };
38
+ }
39
+ visiting.add(name);
40
+ // Check if the value contains a variable reference
41
+ const varRefMatch = value.match(/\$(\w+)/);
42
+ if (varRefMatch) {
43
+ const refVarName = varRefMatch[1];
44
+ if (!(refVarName in allVariables)) {
45
+ return {
46
+ success: false,
47
+ error: {
48
+ variable: name,
49
+ reason: "undefined",
50
+ message: `Undefined variable reference: $${refVarName} in variable "${name}"`,
51
+ },
52
+ };
53
+ }
54
+ const refValue = allVariables[refVarName];
55
+ const refResult = resolveVariable(refVarName, refValue, allVariables, visiting, resolved, resolvedVariables);
56
+ if (!refResult.success) {
57
+ return refResult;
58
+ }
59
+ visiting.delete(name);
60
+ resolved.add(name);
61
+ resolvedVariables[name] = resolvedVariables[refVarName];
62
+ return { success: true, variables: resolvedVariables };
63
+ }
64
+ visiting.delete(name);
65
+ resolved.add(name);
66
+ resolvedVariables[name] = value;
67
+ return { success: true, variables: resolvedVariables };
68
+ }
69
+ /**
70
+ * Replaces all $variableName references in colors and tokens with resolved values.
71
+ */
72
+ function interpolateManifest(manifest, resolvedVariables) {
73
+ return {
74
+ ...manifest,
75
+ colors: interpolateObject(manifest.colors || {}, resolvedVariables),
76
+ tokens: interpolateTokens(manifest.tokens || {}, resolvedVariables),
77
+ };
78
+ }
79
+ function interpolateObject(obj, variables) {
80
+ const result = {};
81
+ for (const [key, value] of Object.entries(obj)) {
82
+ result[key] = interpolateString(value, variables);
83
+ }
84
+ return result;
85
+ }
86
+ function interpolateTokens(tokens, variables) {
87
+ const result = {};
88
+ for (const [scope, settings] of Object.entries(tokens)) {
89
+ result[scope] = {};
90
+ for (const [prop, value] of Object.entries(settings)) {
91
+ if (typeof value === "string") {
92
+ result[scope][prop] = interpolateString(value, variables);
93
+ }
94
+ else {
95
+ result[scope][prop] = value;
96
+ }
97
+ }
98
+ }
99
+ return result;
100
+ }
101
+ function interpolateString(value, variables) {
102
+ return value.replace(/\$(\w+)/g, (match, varName) => {
103
+ return variables[varName] || match;
104
+ });
105
+ }
106
+ /**
107
+ * Validates that all $variableName references point to existing variables.
108
+ */
109
+ function validateVariableReferences(manifest) {
110
+ const errors = [];
111
+ const undefinedVars = new Set();
112
+ // Check colors
113
+ for (const [key, value] of Object.entries(manifest.colors || {})) {
114
+ const refs = extractVariableReferences(value);
115
+ for (const ref of refs) {
116
+ if (!(ref in (manifest.variables || {}))) {
117
+ undefinedVars.add(ref);
118
+ errors.push({
119
+ location: `colors.${key}`,
120
+ variable: ref,
121
+ message: `Undefined variable $${ref}`,
122
+ });
123
+ }
124
+ }
125
+ }
126
+ // Check tokens
127
+ for (const [scope, settings] of Object.entries(manifest.tokens || {})) {
128
+ for (const [prop, value] of Object.entries(settings)) {
129
+ if (typeof value === "string") {
130
+ const refs = extractVariableReferences(value);
131
+ for (const ref of refs) {
132
+ if (!(ref in (manifest.variables || {}))) {
133
+ undefinedVars.add(ref);
134
+ errors.push({
135
+ location: `tokens.${scope}.${prop}`,
136
+ variable: ref,
137
+ message: `Undefined variable $${ref}`,
138
+ });
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ return errors;
145
+ }
146
+ function extractVariableReferences(value) {
147
+ const refs = [];
148
+ const regex = /\$(\w+)/g;
149
+ let match;
150
+ while ((match = regex.exec(value)) !== null) {
151
+ refs.push(match[1]);
152
+ }
153
+ return refs;
154
+ }
155
+ //# sourceMappingURL=variables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../src/core/variables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Manifest } from "../core/manifest";
2
+ export declare function exportNotepadPlus(manifest: Manifest): string;
3
+ //# sourceMappingURL=notepad-plus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notepad-plus.d.ts","sourceRoot":"","sources":["../../src/exporters/notepad-plus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAkE5C,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA4C5D"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exportNotepadPlus = exportNotepadPlus;
4
+ function hexToRgb(hex) {
5
+ const result = /^#?([a-f\d]{2})?([a-f\d]{2})?([a-f\d]{2})?$/i.exec(hex);
6
+ if (!result || !result[1] || !result[2] || !result[3]) {
7
+ return { r: 0, g: 0, b: 0 };
8
+ }
9
+ return {
10
+ r: parseInt(result[1], 16),
11
+ g: parseInt(result[2], 16),
12
+ b: parseInt(result[3], 16),
13
+ };
14
+ }
15
+ function rgbToNotepadFormat(r, g, b) {
16
+ return `${b.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${r.toString(16).padStart(2, "0")}`;
17
+ }
18
+ function buildTokenStyle(scope, settings) {
19
+ const style = {
20
+ name: scope,
21
+ styleID: scope,
22
+ };
23
+ if (settings.foreground) {
24
+ const rgb = hexToRgb(settings.foreground);
25
+ style.fgColor = rgbToNotepadFormat(rgb.r, rgb.g, rgb.b);
26
+ }
27
+ if (settings.background) {
28
+ const rgb = hexToRgb(settings.background);
29
+ style.bgColor = rgbToNotepadFormat(rgb.r, rgb.g, rgb.b);
30
+ }
31
+ if (settings.fontStyle?.includes("bold")) {
32
+ style.bold = true;
33
+ }
34
+ if (settings.fontStyle?.includes("italic")) {
35
+ style.italic = true;
36
+ }
37
+ if (settings.fontStyle?.includes("underline")) {
38
+ style.underline = true;
39
+ }
40
+ return style;
41
+ }
42
+ function escapeXml(text) {
43
+ return text
44
+ .replace(/&/g, "&")
45
+ .replace(/</g, "&lt;")
46
+ .replace(/>/g, "&gt;")
47
+ .replace(/"/g, "&quot;")
48
+ .replace(/'/g, "&apos;");
49
+ }
50
+ function exportNotepadPlus(manifest) {
51
+ const editorBgColor = manifest.colors?.["editor.background"] || "#ffffff";
52
+ const editorFgColor = manifest.colors?.["editor.foreground"] || "#000000";
53
+ const bgRgb = hexToRgb(editorBgColor);
54
+ const fgRgb = hexToRgb(editorFgColor);
55
+ let xml = `<?xml version="1.0" encoding="UTF-8" ?>
56
+ <NotepadPlus>
57
+ <UserLang name="${escapeXml(manifest.name)}" ext="txt" udlVersion="2.1">
58
+ <Settings>
59
+ <Global caseIgnored="no" allowFoldOfComments="no" foldCompact="no" forcePureLC="0" />
60
+ <TotalKeywordLists number="1">
61
+ <KeywordList name="Delimiters">
62
+ <Keyword name="0" value="0" />
63
+ </KeywordList>
64
+ </TotalKeywordLists>
65
+ </Settings>
66
+ <KeywordLists />
67
+ <Styles>
68
+ <WordsStyle name="DEFAULT" styleID="0" fgColor="${rgbToNotepadFormat(fgRgb.r, fgRgb.g, fgRgb.b)}" bgColor="${rgbToNotepadFormat(bgRgb.r, bgRgb.g, bgRgb.b)}" fontName="" fontStyle="0" fontSize="" />
69
+ `;
70
+ let styleId = 1;
71
+ for (const [scope, settings] of Object.entries(manifest.tokens || {})) {
72
+ const style = buildTokenStyle(scope, settings);
73
+ let styleFlags = 0;
74
+ if (style.bold)
75
+ styleFlags |= 1;
76
+ if (style.italic)
77
+ styleFlags |= 2;
78
+ if (style.underline)
79
+ styleFlags |= 4;
80
+ const fgColor = style.fgColor || rgbToNotepadFormat(fgRgb.r, fgRgb.g, fgRgb.b);
81
+ const bgColor = style.bgColor || rgbToNotepadFormat(bgRgb.r, bgRgb.g, bgRgb.b);
82
+ xml += ` <WordsStyle name="${escapeXml(style.name)}" styleID="${styleId}" fgColor="${fgColor}" bgColor="${bgColor}" fontName="" fontStyle="${styleFlags}" fontSize="" />\n`;
83
+ styleId++;
84
+ }
85
+ xml += ` </Styles>
86
+ </UserLang>
87
+ </NotepadPlus>`;
88
+ return xml;
89
+ }
90
+ //# sourceMappingURL=notepad-plus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notepad-plus.js","sourceRoot":"","sources":["../../src/exporters/notepad-plus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Manifest } from "../core/manifest";
2
+ export interface VSCodeTheme {
3
+ name: string;
4
+ colors: Record<string, string>;
5
+ tokenColors: Array<{
6
+ scope: string | string[];
7
+ settings: Record<string, string | number>;
8
+ }>;
9
+ }
10
+ export declare function exportVSCode(manifest: Manifest): VSCodeTheme;
11
+ //# sourceMappingURL=vscode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode.d.ts","sourceRoot":"","sources":["../../src/exporters/vscode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,WAAW,EAAE,KAAK,CAAC;QACjB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;KAC3C,CAAC,CAAC;CACJ;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAoC5D"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exportVSCode = exportVSCode;
4
+ function exportVSCode(manifest) {
5
+ const tokenColors = [];
6
+ for (const [scope, settings] of Object.entries(manifest.tokens || {})) {
7
+ const vsCodeSettings = {};
8
+ if (settings.foreground) {
9
+ vsCodeSettings.foreground = settings.foreground;
10
+ }
11
+ if (settings.background) {
12
+ vsCodeSettings.background = settings.background;
13
+ }
14
+ if (settings.fontStyle) {
15
+ vsCodeSettings.fontStyle = settings.fontStyle;
16
+ }
17
+ if (settings.fontWeight) {
18
+ vsCodeSettings.fontWeight = settings.fontWeight;
19
+ }
20
+ if (settings.opacity !== undefined) {
21
+ vsCodeSettings.opacity = settings.opacity;
22
+ }
23
+ tokenColors.push({
24
+ scope,
25
+ settings: vsCodeSettings,
26
+ });
27
+ }
28
+ return {
29
+ name: manifest.name,
30
+ colors: manifest.colors || {},
31
+ tokenColors,
32
+ };
33
+ }
34
+ //# sourceMappingURL=vscode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/exporters/vscode.ts"],"names":[],"mappings":";;AAWA,oCAoCC;AApCD,SAAgB,YAAY,CAAC,QAAkB;IAC7C,MAAM,WAAW,GAGZ,EAAE,CAAC;IAER,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,MAAM,cAAc,GAAoC,EAAE,CAAC;QAE3D,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,cAAc,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,cAAc,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,cAAc,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAChD,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,cAAc,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACnC,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC5C,CAAC;QAED,WAAW,CAAC,IAAI,CAAC;YACf,KAAK;YACL,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;QAC7B,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Manifest } from "../core/manifest";
2
+ export interface ZedTheme {
3
+ name: string;
4
+ appearance: "light" | "dark";
5
+ colors: Record<string, string>;
6
+ token_colors: Array<{
7
+ scope: string | string[];
8
+ settings: Record<string, string | number | boolean>;
9
+ }>;
10
+ }
11
+ export declare function exportZed(manifest: Manifest): ZedTheme;
12
+ //# sourceMappingURL=zed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zed.d.ts","sourceRoot":"","sources":["../../src/exporters/zed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,KAAK,CAAC;QAClB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;KACrD,CAAC,CAAC;CACJ;AAUD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CA2CtD"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exportZed = exportZed;
4
+ function detectAppearance(manifest) {
5
+ const bgColor = manifest.colors?.["editor.background"] || "#ffffff";
6
+ const bgHex = bgColor.toLowerCase();
7
+ const rgb = parseInt(bgHex.slice(1), 16);
8
+ const brightness = (rgb >> 16 & 0xff) * 0.299 + (rgb >> 8 & 0xff) * 0.587 + (rgb & 0xff) * 0.114;
9
+ return brightness > 128 ? "light" : "dark";
10
+ }
11
+ function exportZed(manifest) {
12
+ const tokenColors = [];
13
+ for (const [scope, settings] of Object.entries(manifest.tokens || {})) {
14
+ const zedSettings = {};
15
+ if (settings.foreground) {
16
+ zedSettings.foreground = settings.foreground;
17
+ }
18
+ if (settings.background) {
19
+ zedSettings.background = settings.background;
20
+ }
21
+ const fontStyles = [];
22
+ if (settings.fontStyle && typeof settings.fontStyle === "string") {
23
+ if (settings.fontStyle.includes("bold"))
24
+ fontStyles.push("bold");
25
+ if (settings.fontStyle.includes("italic"))
26
+ fontStyles.push("italic");
27
+ if (settings.fontStyle.includes("underline"))
28
+ fontStyles.push("underline");
29
+ }
30
+ if (fontStyles.length > 0) {
31
+ zedSettings.font_style = fontStyles.join(" ");
32
+ }
33
+ if (settings.opacity !== undefined) {
34
+ zedSettings.opacity = settings.opacity;
35
+ }
36
+ tokenColors.push({
37
+ scope,
38
+ settings: zedSettings,
39
+ });
40
+ }
41
+ return {
42
+ name: manifest.name,
43
+ appearance: detectAppearance(manifest),
44
+ colors: manifest.colors || {},
45
+ token_colors: tokenColors,
46
+ };
47
+ }
48
+ //# sourceMappingURL=zed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zed.js","sourceRoot":"","sources":["../../src/exporters/zed.ts"],"names":[],"mappings":";;AAoBA,8BA2CC;AAnDD,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,mBAAmB,CAAC,IAAI,SAAS,CAAC;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IACjG,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7C,CAAC;AAED,SAAgB,SAAS,CAAC,QAAkB;IAC1C,MAAM,WAAW,GAGZ,EAAE,CAAC;IAER,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,MAAM,WAAW,GAA8C,EAAE,CAAC;QAElE,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,WAAW,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QAC/C,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,WAAW,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QAC/C,CAAC;QAED,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,QAAQ,CAAC,SAAS,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACjE,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjE,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrE,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,WAAW,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACnC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACzC,CAAC;QAED,WAAW,CAAC,IAAI,CAAC;YACf,KAAK;YACL,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CAAC;QACtC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;QAC7B,YAAY,EAAE,WAAW;KAC1B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Manifest } from "../core/manifest";
2
+ export declare function renderPreview(manifest: Manifest, themeName: string): string;
3
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/preview/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA+C5C,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CA4N3E"}
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderPreview = renderPreview;
4
+ const variables_1 = require("../core/variables");
5
+ function generateColorPalette(manifest, resolved) {
6
+ let html = "";
7
+ for (const [name, color] of Object.entries(manifest.variables || {})) {
8
+ const resolvedColor = resolved[name] || color;
9
+ html += `
10
+ <div class="color-box">
11
+ <div class="swatch" style="background-color: ${resolvedColor};"></div>
12
+ <div class="name">${name}</div>
13
+ <div class="value">${resolvedColor}</div>
14
+ </div>`;
15
+ }
16
+ return html;
17
+ }
18
+ function generateCSSFromTheme(manifest) {
19
+ let css = "";
20
+ // Set root colors
21
+ if (manifest.colors?.["editor.background"]) {
22
+ css += `body { background-color: ${manifest.colors["editor.background"]}; }\n`;
23
+ }
24
+ if (manifest.colors?.["editor.foreground"]) {
25
+ css += `body { color: ${manifest.colors["editor.foreground"]}; }\n`;
26
+ }
27
+ // Token styles
28
+ css += `.keyword { color: ${manifest.tokens?.keyword?.foreground || "#569cd6"}; `;
29
+ if (typeof manifest.tokens?.keyword?.fontStyle === "string" && manifest.tokens.keyword.fontStyle.includes("bold"))
30
+ css += "font-weight: bold; ";
31
+ css += "}\n";
32
+ css += `.string { color: ${manifest.tokens?.string?.foreground || "#ce9178"}; }\n`;
33
+ css += `.comment { color: ${manifest.tokens?.comment?.foreground || "#6a9955"}; `;
34
+ if (typeof manifest.tokens?.comment?.fontStyle === "string" && manifest.tokens.comment.fontStyle.includes("italic"))
35
+ css += "font-style: italic; ";
36
+ css += "}\n";
37
+ css += `.number { color: ${manifest.tokens?.number?.foreground || "#b5cea8"}; }\n`;
38
+ css += `.builtin { color: ${manifest.tokens?.["constant.builtin"]?.foreground || "#4ec9b0"}; }\n`;
39
+ return css;
40
+ }
41
+ function renderPreview(manifest, themeName) {
42
+ // Resolve variables for color display
43
+ const variableResolution = (0, variables_1.resolveVariables)(manifest);
44
+ const resolved = variableResolution.success ? variableResolution.variables : {};
45
+ // Get interpolated manifest for rendering
46
+ const interpolated = variableResolution.success ?
47
+ (0, variables_1.interpolateManifest)(manifest, resolved)
48
+ : manifest;
49
+ const colorPalette = generateColorPalette(manifest, resolved);
50
+ const themeCSS = generateCSSFromTheme(interpolated);
51
+ return `<!DOCTYPE html>
52
+ <html lang="en">
53
+ <head>
54
+ <meta charset="UTF-8">
55
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
56
+ <title>${themeName} - Live Preview</title>
57
+ <style>
58
+ * {
59
+ margin: 0;
60
+ padding: 0;
61
+ box-sizing: border-box;
62
+ }
63
+
64
+ body {
65
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
66
+ background-color: ${interpolated.colors?.["editor.background"] || "#1e1e1e"};
67
+ color: ${interpolated.colors?.["editor.foreground"] || "#d4d4d4"};
68
+ padding: 20px;
69
+ line-height: 1.6;
70
+ }
71
+
72
+ .container {
73
+ max-width: 1200px;
74
+ margin: 0 auto;
75
+ }
76
+
77
+ h1 {
78
+ margin-bottom: 10px;
79
+ color: ${interpolated.colors?.["editor.lineNumberActiveForeground"] || "#61dafb"};
80
+ }
81
+
82
+ .subtitle {
83
+ color: ${interpolated.colors?.["editorWhitespace.foreground"] || "#888"};
84
+ margin-bottom: 30px;
85
+ }
86
+
87
+ .section {
88
+ margin-bottom: 40px;
89
+ }
90
+
91
+ .section h2 {
92
+ font-size: 18px;
93
+ color: ${interpolated.colors?.["editor.lineNumberActiveForeground"] || "#61dafb"};
94
+ margin-bottom: 15px;
95
+ border-bottom: 1px solid #444;
96
+ padding-bottom: 10px;
97
+ }
98
+
99
+ .code-sample {
100
+ background-color: ${interpolated.colors?.["editor.background"] || "#252526"};
101
+ border: 1px solid #3e3e42;
102
+ border-radius: 4px;
103
+ padding: 15px;
104
+ overflow-x: auto;
105
+ margin-bottom: 15px;
106
+ }
107
+
108
+ .code-sample code {
109
+ display: block;
110
+ }
111
+
112
+ ${themeCSS}
113
+
114
+ .palette {
115
+ display: grid;
116
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
117
+ gap: 15px;
118
+ margin-bottom: 20px;
119
+ }
120
+
121
+ .color-box {
122
+ display: flex;
123
+ flex-direction: column;
124
+ align-items: center;
125
+ padding: 15px;
126
+ border: 1px solid #3e3e42;
127
+ border-radius: 4px;
128
+ background-color: ${interpolated.colors?.["editor.background"] || "#252526"};
129
+ }
130
+
131
+ .color-box .swatch {
132
+ width: 100%;
133
+ height: 80px;
134
+ border-radius: 4px;
135
+ margin-bottom: 10px;
136
+ border: 1px solid #3e3e42;
137
+ }
138
+
139
+ .color-box .name {
140
+ font-size: 12px;
141
+ color: ${interpolated.colors?.["editorWhitespace.foreground"] || "#888"};
142
+ text-align: center;
143
+ word-break: break-word;
144
+ }
145
+
146
+ .color-box .value {
147
+ font-size: 11px;
148
+ color: ${interpolated.colors?.["editor.lineNumberActiveForeground"] || "#61dafb"};
149
+ font-family: monospace;
150
+ margin-top: 5px;
151
+ }
152
+
153
+ .status {
154
+ padding: 10px 15px;
155
+ border-radius: 4px;
156
+ margin-bottom: 20px;
157
+ }
158
+
159
+ .status.success {
160
+ background-color: #1f6f1f;
161
+ color: #6ec46e;
162
+ }
163
+
164
+ .status.error {
165
+ background-color: #6f1f1f;
166
+ color: #c46e6e;
167
+ }
168
+
169
+ .reload-hint {
170
+ position: fixed;
171
+ bottom: 20px;
172
+ right: 20px;
173
+ background-color: #333;
174
+ border: 1px solid #555;
175
+ border-radius: 4px;
176
+ padding: 10px 15px;
177
+ font-size: 12px;
178
+ color: #888;
179
+ }
180
+ </style>
181
+ </head>
182
+ <body>
183
+ <div class="container">
184
+ <h1>${themeName}</h1>
185
+ <p class="subtitle">Live Preview • Edit manifest.json to see changes</p>
186
+
187
+ <div id="status" class="status success" style="display:none;"></div>
188
+
189
+ <div class="section">
190
+ <h2>Color Palette</h2>
191
+ <div class="palette" id="palette">${colorPalette}</div>
192
+ </div>
193
+
194
+ <div class="section">
195
+ <h2>JavaScript</h2>
196
+ <div class="code-sample">
197
+ <code>
198
+ <span class="keyword">const</span> greeting = <span class="string">"Hello, World!"</span>;
199
+ <span class="keyword">function</span> greet(name) {
200
+ <span class="comment">// Print greeting</span>
201
+ console.log(\`\${greeting} My name is \${name}\`);
202
+ <span class="keyword">return</span> <span class="number">42</span>;
203
+ }
204
+ </code>
205
+ </div>
206
+ </div>
207
+
208
+ <div class="section">
209
+ <h2>Python</h2>
210
+ <div class="code-sample">
211
+ <code>
212
+ <span class="keyword">def</span> greet(name):
213
+ <span class="comment"># Print greeting</span>
214
+ greeting = <span class="string">"Hello, World!"</span>
215
+ print(f<span class="string">"{greeting} My name is {name}"</span>)
216
+ <span class="keyword">return</span> <span class="number">42</span>
217
+
218
+ greet(<span class="string">"Python"</span>)
219
+ </code>
220
+ </div>
221
+ </div>
222
+
223
+ <div class="section">
224
+ <h2>JSON</h2>
225
+ <div class="code-sample">
226
+ <code>
227
+ {
228
+ <span class="string">"name"</span>: <span class="string">"My Theme"</span>,
229
+ <span class="string">"version"</span>: <span class="string">"1.0.0"</span>,
230
+ <span class="string">"colors"</span>: {
231
+ <span class="string">"background"</span>: <span class="string">"${interpolated.colors?.["editor.background"] || "#1e1e1e"}"</span>,
232
+ <span class="string">"foreground"</span>: <span class="string">"${interpolated.colors?.["editor.foreground"] || "#d4d4d4"}"</span>
233
+ }
234
+ }
235
+ </code>
236
+ </div>
237
+ </div>
238
+ </div>
239
+
240
+ <div class="reload-hint">🔄 Watching for changes...</div>
241
+
242
+ <script>
243
+ // Hot-reload on file change
244
+ const ws = new WebSocket(\`ws://\${window.location.host}/ws\`);
245
+ ws.addEventListener('message', (event) => {
246
+ if (event.data === 'reload') {
247
+ window.location.reload();
248
+ }
249
+ });
250
+ ws.addEventListener('error', () => {
251
+ console.log('WebSocket connection failed - hot-reload unavailable');
252
+ });
253
+ </script>
254
+ </body>
255
+ </html>`;
256
+ }
257
+ //# sourceMappingURL=renderer.js.map