@tamagui/generate-themes 1.39.4 → 1.39.6
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/dist/cjs/generate-themes.js +24 -9
- package/dist/cjs/generate-themes.js.map +2 -2
- package/dist/cjs/write-generate-themes.js +2 -1
- package/dist/cjs/write-generate-themes.js.map +1 -1
- package/dist/esm/generate-themes.js +24 -9
- package/dist/esm/generate-themes.js.map +2 -2
- package/dist/esm/generate-themes.mjs +24 -9
- package/dist/esm/generate-themes.mjs.map +2 -2
- package/dist/esm/write-generate-themes.js +2 -1
- package/dist/esm/write-generate-themes.js.map +1 -1
- package/dist/esm/write-generate-themes.mjs +2 -1
- package/dist/esm/write-generate-themes.mjs.map +1 -1
- package/package.json +4 -4
- package/src/generate-themes.ts +34 -10
- package/src/write-generate-themes.ts +4 -1
- package/types/write-generate-themes.d.ts.map +1 -1
|
@@ -68,17 +68,24 @@ async function generateThemes(inputFile) {
|
|
|
68
68
|
import_module.default.prototype.require = ogRequire;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
+
const dedupedTokens = /* @__PURE__ */ new Map();
|
|
71
72
|
function generatedThemesToTypescript(themes) {
|
|
72
|
-
const
|
|
73
|
-
const
|
|
73
|
+
const dedupedThemes = /* @__PURE__ */ new Map();
|
|
74
|
+
const dedupedThemeToNames = /* @__PURE__ */ new Map();
|
|
74
75
|
for (const name in themes) {
|
|
75
76
|
const theme = themes[name];
|
|
77
|
+
for (const [key2, value] of Object.entries(theme)) {
|
|
78
|
+
const uniqueKey = `${name}_${key2}`;
|
|
79
|
+
if (!dedupedTokens.has(value)) {
|
|
80
|
+
dedupedTokens.set(value, uniqueKey);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
76
83
|
const key = JSON.stringify(theme);
|
|
77
|
-
if (
|
|
78
|
-
|
|
84
|
+
if (dedupedThemes.has(key)) {
|
|
85
|
+
dedupedThemeToNames.set(key, [...dedupedThemeToNames.get(key), name]);
|
|
79
86
|
} else {
|
|
80
|
-
|
|
81
|
-
|
|
87
|
+
dedupedThemes.set(key, theme);
|
|
88
|
+
dedupedThemeToNames.set(key, [name]);
|
|
82
89
|
}
|
|
83
90
|
}
|
|
84
91
|
const baseTypeString = `type Theme = {
|
|
@@ -89,9 +96,14 @@ ${Object.entries(themes.light || themes[Object.keys(themes)[0]]).map(([k]) => {
|
|
|
89
96
|
}`;
|
|
90
97
|
let themesString = `${baseTypeString}
|
|
91
98
|
`;
|
|
92
|
-
|
|
99
|
+
dedupedTokens.forEach((names, value) => {
|
|
100
|
+
themesString += `const ${names} = '${value}'
|
|
101
|
+
`;
|
|
102
|
+
});
|
|
103
|
+
themesString += "\n";
|
|
104
|
+
dedupedThemes.forEach((theme) => {
|
|
93
105
|
const key = JSON.stringify(theme);
|
|
94
|
-
const [baseName, ...restNames] =
|
|
106
|
+
const [baseName, ...restNames] = dedupedThemeToNames.get(key);
|
|
95
107
|
const baseTheme = `export const ${baseName} = ${objectToJsString(theme)} as Theme`;
|
|
96
108
|
themesString += `
|
|
97
109
|
${baseTheme}`;
|
|
@@ -109,7 +121,10 @@ ${baseTheme}`;
|
|
|
109
121
|
function objectToJsString(obj, indent = 4) {
|
|
110
122
|
const whitespace = new Array(indent).fill(" ").join("");
|
|
111
123
|
return `{
|
|
112
|
-
${Object.entries(obj).map(([k, v]) =>
|
|
124
|
+
${Object.entries(obj).map(([k, v]) => {
|
|
125
|
+
const variableName = dedupedTokens.get(v);
|
|
126
|
+
return `${whitespace}${k}: ${variableName}`;
|
|
127
|
+
}).join(",\n")}
|
|
113
128
|
}`;
|
|
114
129
|
}
|
|
115
130
|
function createThemeIntercept(createThemeExport, themeBuilderInterceptOpts) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/generate-themes.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,kBAAqB;AAQrB,eAAsB,eAAe,WAAmB;AACtD,UAAQ,4BAA4B,EAAE,SAAS;AAE/C,MAAI,UAAoD;AAExD,QAAM,YAAY,cAAAA,QAAO,UAAU;AAEnC,gBAAAA,QAAO,UAAU,UAAU,SAAU,IAAI;AAEvC,UAAM,MAAM,UAAU,MAAM,MAAM,SAAS;AAC3C,QAAI,OAAO,yCAAyC,OAAO,0BAA0B;AACnF,UAAI,CAAC,SAAS;AACZ,YAAI;AACJ,kBAAU,IAAI,QAAQ,CAAC,QAAQ;AAC7B,oBAAU;AAAA,QACZ,CAAC;AACD,eAAO,qBAAqB,KAAK;AAAA,UAC/B,YAAY,CAAC,WAAW;AACtB,+CAAU,OAAO;AAAA,UACnB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,gBACJ,UAAU,CAAC,MAAM,UAAM,kBAAK,QAAQ,IAAI,GAAG,SAAS,IAAI;AAC1D,UAAM,iBAAiB,QAAQ,aAAa;AAC5C,UAAM,SAAS,eAAe,SAAS,KAAK,eAAe,QAAQ;AACnE,UAAM,kBAAkB,4BAA4B,MAAM;AAC1D,UAAM,eAAe,UAAU,MAAM,UAAU;AAC/C,WAAO;AAAA,MACL,WAAW;AAAA,MACX,OAAO,6CAAc;AAAA,IACvB;AAAA,EACF,UAAE;AACA,kBAAAA,QAAO,UAAU,UAAU;AAAA,EAC7B;AACF;
|
|
5
|
-
"names": ["Module", "target"]
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,kBAAqB;AAQrB,eAAsB,eAAe,WAAmB;AACtD,UAAQ,4BAA4B,EAAE,SAAS;AAE/C,MAAI,UAAoD;AAExD,QAAM,YAAY,cAAAA,QAAO,UAAU;AAEnC,gBAAAA,QAAO,UAAU,UAAU,SAAU,IAAI;AAEvC,UAAM,MAAM,UAAU,MAAM,MAAM,SAAS;AAC3C,QAAI,OAAO,yCAAyC,OAAO,0BAA0B;AACnF,UAAI,CAAC,SAAS;AACZ,YAAI;AACJ,kBAAU,IAAI,QAAQ,CAAC,QAAQ;AAC7B,oBAAU;AAAA,QACZ,CAAC;AACD,eAAO,qBAAqB,KAAK;AAAA,UAC/B,YAAY,CAAC,WAAW;AACtB,+CAAU,OAAO;AAAA,UACnB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,gBACJ,UAAU,CAAC,MAAM,UAAM,kBAAK,QAAQ,IAAI,GAAG,SAAS,IAAI;AAC1D,UAAM,iBAAiB,QAAQ,aAAa;AAC5C,UAAM,SAAS,eAAe,SAAS,KAAK,eAAe,QAAQ;AACnE,UAAM,kBAAkB,4BAA4B,MAAM;AAC1D,UAAM,eAAe,UAAU,MAAM,UAAU;AAC/C,WAAO;AAAA,MACL,WAAW;AAAA,MACX,OAAO,6CAAc;AAAA,IACvB;AAAA,EACF,UAAE;AACA,kBAAAA,QAAO,UAAU,UAAU;AAAA,EAC7B;AACF;AAKA,MAAM,gBAAgB,oBAAI,IAAoB;AAE9C,SAAS,4BAA4B,QAA6B;AAChE,QAAM,gBAAgB,oBAAI,IAAoB;AAC9C,QAAM,sBAAsB,oBAAI,IAAsB;AAEtD,aAAW,QAAQ,QAAQ;AACzB,UAAM,QAAgC,OAAO,IAAI;AAGjD,eAAW,CAACC,MAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,YAAM,YAAY,GAAG,QAAQA;AAC7B,UAAI,CAAC,cAAc,IAAI,KAAK,GAAG;AAC7B,sBAAc,IAAI,OAAO,SAAS;AAAA,MACpC;AAAA,IACF;AAEA,UAAM,MAAM,KAAK,UAAU,KAAK;AAChC,QAAI,cAAc,IAAI,GAAG,GAAG;AAC1B,0BAAoB,IAAI,KAAK,CAAC,GAAG,oBAAoB,IAAI,GAAG,GAAI,IAAI,CAAC;AAAA,IACvE,OAAO;AACL,oBAAc,IAAI,KAAK,KAAK;AAC5B,0BAAoB,IAAI,KAAK,CAAC,IAAI,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,iBAAiB;AAAA,EACvB,OAAO,QAAQ,OAAO,SAAS,OAAO,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAC5D,IAAI,CAAC,CAAC,CAAC,MAAM;AACZ,WAAO,KAAK;AAAA;AAAA,EACd,CAAC,EACA,KAAK,EAAE;AAAA;AAGR,MAAI,eAAe,GAAG;AAAA;AAItB,gBAAc,QAAQ,CAAC,OAAO,UAAU;AACtC,oBAAgB,SAAS,YAAY;AAAA;AAAA,EACvC,CAAC;AACD,kBAAgB;AAEhB,gBAAc,QAAQ,CAAC,UAAU;AAC/B,UAAM,MAAM,KAAK,UAAU,KAAK;AAChC,UAAM,CAAC,UAAU,GAAG,SAAS,IAAI,oBAAoB,IAAI,GAAG;AAC5D,UAAM,YAAY,gBAAgB,cAAc,iBAAiB,KAAK;AACtE,oBAAgB;AAAA,EAAK;AAErB,QAAI,UAAU,QAAQ;AACpB,YAAM,kBAAkB,UAAU;AAAA,QAChC,CAAC,SAAS,gBAAgB,UAAU;AAAA,MACtC;AACA,sBAAgB;AAAA;AAAA,IAAS,gBAAgB,KAAK,IAAI;AAAA,IACpD;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,SAAS,iBAAiB,KAAa,SAAS,GAAG;AACjD,QAAM,aAAa,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE;AACtD,SAAO;AAAA,EACP,OAAO,QAAQ,GAAG,EACjB,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AACf,UAAM,eAAe,cAAc,IAAI,CAAC;AACxC,WAAO,GAAG,aAAa,MAAM;AAAA,EAC/B,CAAC,EACA,KAAK,KAAK;AAAA;AAEb;AAEA,SAAS,qBACP,mBACA,2BACA;AACA,SAAO,IAAI,MAAM,mBAAmB;AAAA,IAClC,IAAI,QAAQ,KAAK;AACf,YAAM,MAAM,QAAQ,IAAI,QAAQ,GAAG;AACnC,UAAI,QAAQ,sBAAsB;AAChC,eAAO,IAAI,MAAM,KAAK;AAAA,UACpB,MAAMC,SAAQ,SAAS,UAAU;AAC/B,kBAAM,UAAU,QAAQ,MAAMA,SAAQ,SAAS,QAAQ;AACvD,mBAAO,sBAAsB,SAAS,yBAAyB;AAAA,UACjE;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEA,SAAS,sBACP,cACA,2BACA;AACA,SAAO,IAAI,MAAM,cAAc;AAAA,IAC7B,IAAI,QAAQ,KAAK;AACf,YAAM,MAAM,QAAQ,IAAI,QAAQ,GAAG;AACnC,UAAI,QAAQ,SAAS;AAEnB,kCAA0B,WAAW;AAAA,UACnC;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;",
|
|
5
|
+
"names": ["Module", "key", "target"]
|
|
6
6
|
}
|
|
@@ -35,6 +35,7 @@ var import_path = require("path");
|
|
|
35
35
|
var fs = __toESM(require("fs-extra"));
|
|
36
36
|
async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
|
|
37
37
|
const { generated, state } = generatedOutput;
|
|
38
|
+
const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir);
|
|
38
39
|
const themeBuilderStatePath = (0, import_path.join)(tamaguiDotDir, `theme-builder.json`);
|
|
39
40
|
if (process.env.DEBUG === "tamagui") {
|
|
40
41
|
console.log(`Generated themes:`, JSON.stringify({ generated, state }, null, 2));
|
|
@@ -42,7 +43,7 @@ async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
|
|
|
42
43
|
}
|
|
43
44
|
await Promise.all([
|
|
44
45
|
fs.writeFile(outPath, generated),
|
|
45
|
-
state ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
|
|
46
|
+
state && tamaguiDotDirExists ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
|
|
46
47
|
]);
|
|
47
48
|
}
|
|
48
49
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/write-generate-themes.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAqB;AAErB,SAAoB;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,4BAAwB,kBAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAqB;AAErB,SAAoB;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,4BAAwB,kBAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,SAAS,sBACL,GAAG,UAAU,uBAAuB,KAAK,UAAU,KAAK,CAAC,IACzD;AAAA,EACN,CAAC;AACH;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -35,17 +35,24 @@ async function generateThemes(inputFile) {
|
|
|
35
35
|
Module.prototype.require = ogRequire;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
+
const dedupedTokens = /* @__PURE__ */ new Map();
|
|
38
39
|
function generatedThemesToTypescript(themes) {
|
|
39
|
-
const
|
|
40
|
-
const
|
|
40
|
+
const dedupedThemes = /* @__PURE__ */ new Map();
|
|
41
|
+
const dedupedThemeToNames = /* @__PURE__ */ new Map();
|
|
41
42
|
for (const name in themes) {
|
|
42
43
|
const theme = themes[name];
|
|
44
|
+
for (const [key2, value] of Object.entries(theme)) {
|
|
45
|
+
const uniqueKey = `${name}_${key2}`;
|
|
46
|
+
if (!dedupedTokens.has(value)) {
|
|
47
|
+
dedupedTokens.set(value, uniqueKey);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
43
50
|
const key = JSON.stringify(theme);
|
|
44
|
-
if (
|
|
45
|
-
|
|
51
|
+
if (dedupedThemes.has(key)) {
|
|
52
|
+
dedupedThemeToNames.set(key, [...dedupedThemeToNames.get(key), name]);
|
|
46
53
|
} else {
|
|
47
|
-
|
|
48
|
-
|
|
54
|
+
dedupedThemes.set(key, theme);
|
|
55
|
+
dedupedThemeToNames.set(key, [name]);
|
|
49
56
|
}
|
|
50
57
|
}
|
|
51
58
|
const baseTypeString = `type Theme = {
|
|
@@ -56,9 +63,14 @@ ${Object.entries(themes.light || themes[Object.keys(themes)[0]]).map(([k]) => {
|
|
|
56
63
|
}`;
|
|
57
64
|
let themesString = `${baseTypeString}
|
|
58
65
|
`;
|
|
59
|
-
|
|
66
|
+
dedupedTokens.forEach((names, value) => {
|
|
67
|
+
themesString += `const ${names} = '${value}'
|
|
68
|
+
`;
|
|
69
|
+
});
|
|
70
|
+
themesString += "\n";
|
|
71
|
+
dedupedThemes.forEach((theme) => {
|
|
60
72
|
const key = JSON.stringify(theme);
|
|
61
|
-
const [baseName, ...restNames] =
|
|
73
|
+
const [baseName, ...restNames] = dedupedThemeToNames.get(key);
|
|
62
74
|
const baseTheme = `export const ${baseName} = ${objectToJsString(theme)} as Theme`;
|
|
63
75
|
themesString += `
|
|
64
76
|
${baseTheme}`;
|
|
@@ -76,7 +88,10 @@ ${baseTheme}`;
|
|
|
76
88
|
function objectToJsString(obj, indent = 4) {
|
|
77
89
|
const whitespace = new Array(indent).fill(" ").join("");
|
|
78
90
|
return `{
|
|
79
|
-
${Object.entries(obj).map(([k, v]) =>
|
|
91
|
+
${Object.entries(obj).map(([k, v]) => {
|
|
92
|
+
const variableName = dedupedTokens.get(v);
|
|
93
|
+
return `${whitespace}${k}: ${variableName}`;
|
|
94
|
+
}).join(",\n")}
|
|
80
95
|
}`;
|
|
81
96
|
}
|
|
82
97
|
function createThemeIntercept(createThemeExport, themeBuilderInterceptOpts) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/generate-themes.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAS,YAAY;AAQrB,eAAsB,eAAe,WAAmB;AACtD,UAAQ,4BAA4B,EAAE,SAAS;AAE/C,MAAI,UAAoD;AAExD,QAAM,YAAY,OAAO,UAAU;AAEnC,SAAO,UAAU,UAAU,SAAU,IAAI;AAEvC,UAAM,MAAM,UAAU,MAAM,MAAM,SAAS;AAC3C,QAAI,OAAO,yCAAyC,OAAO,0BAA0B;AACnF,UAAI,CAAC,SAAS;AACZ,YAAI;AACJ,kBAAU,IAAI,QAAQ,CAAC,QAAQ;AAC7B,oBAAU;AAAA,QACZ,CAAC;AACD,eAAO,qBAAqB,KAAK;AAAA,UAC/B,YAAY,CAAC,WAAW;AACtB,+CAAU,OAAO;AAAA,UACnB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,gBACJ,UAAU,CAAC,MAAM,MAAM,KAAK,QAAQ,IAAI,GAAG,SAAS,IAAI;AAC1D,UAAM,iBAAiB,QAAQ,aAAa;AAC5C,UAAM,SAAS,eAAe,SAAS,KAAK,eAAe,QAAQ;AACnE,UAAM,kBAAkB,4BAA4B,MAAM;AAC1D,UAAM,eAAe,UAAU,MAAM,UAAU;AAC/C,WAAO;AAAA,MACL,WAAW;AAAA,MACX,OAAO,6CAAc;AAAA,IACvB;AAAA,EACF,UAAE;AACA,WAAO,UAAU,UAAU;AAAA,EAC7B;AACF;
|
|
5
|
-
"names": ["target"]
|
|
4
|
+
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAS,YAAY;AAQrB,eAAsB,eAAe,WAAmB;AACtD,UAAQ,4BAA4B,EAAE,SAAS;AAE/C,MAAI,UAAoD;AAExD,QAAM,YAAY,OAAO,UAAU;AAEnC,SAAO,UAAU,UAAU,SAAU,IAAI;AAEvC,UAAM,MAAM,UAAU,MAAM,MAAM,SAAS;AAC3C,QAAI,OAAO,yCAAyC,OAAO,0BAA0B;AACnF,UAAI,CAAC,SAAS;AACZ,YAAI;AACJ,kBAAU,IAAI,QAAQ,CAAC,QAAQ;AAC7B,oBAAU;AAAA,QACZ,CAAC;AACD,eAAO,qBAAqB,KAAK;AAAA,UAC/B,YAAY,CAAC,WAAW;AACtB,+CAAU,OAAO;AAAA,UACnB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,gBACJ,UAAU,CAAC,MAAM,MAAM,KAAK,QAAQ,IAAI,GAAG,SAAS,IAAI;AAC1D,UAAM,iBAAiB,QAAQ,aAAa;AAC5C,UAAM,SAAS,eAAe,SAAS,KAAK,eAAe,QAAQ;AACnE,UAAM,kBAAkB,4BAA4B,MAAM;AAC1D,UAAM,eAAe,UAAU,MAAM,UAAU;AAC/C,WAAO;AAAA,MACL,WAAW;AAAA,MACX,OAAO,6CAAc;AAAA,IACvB;AAAA,EACF,UAAE;AACA,WAAO,UAAU,UAAU;AAAA,EAC7B;AACF;AAKA,MAAM,gBAAgB,oBAAI,IAAoB;AAE9C,SAAS,4BAA4B,QAA6B;AAChE,QAAM,gBAAgB,oBAAI,IAAoB;AAC9C,QAAM,sBAAsB,oBAAI,IAAsB;AAEtD,aAAW,QAAQ,QAAQ;AACzB,UAAM,QAAgC,OAAO,IAAI;AAGjD,eAAW,CAACA,MAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,YAAM,YAAY,GAAG,QAAQA;AAC7B,UAAI,CAAC,cAAc,IAAI,KAAK,GAAG;AAC7B,sBAAc,IAAI,OAAO,SAAS;AAAA,MACpC;AAAA,IACF;AAEA,UAAM,MAAM,KAAK,UAAU,KAAK;AAChC,QAAI,cAAc,IAAI,GAAG,GAAG;AAC1B,0BAAoB,IAAI,KAAK,CAAC,GAAG,oBAAoB,IAAI,GAAG,GAAI,IAAI,CAAC;AAAA,IACvE,OAAO;AACL,oBAAc,IAAI,KAAK,KAAK;AAC5B,0BAAoB,IAAI,KAAK,CAAC,IAAI,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,iBAAiB;AAAA,EACvB,OAAO,QAAQ,OAAO,SAAS,OAAO,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAC5D,IAAI,CAAC,CAAC,CAAC,MAAM;AACZ,WAAO,KAAK;AAAA;AAAA,EACd,CAAC,EACA,KAAK,EAAE;AAAA;AAGR,MAAI,eAAe,GAAG;AAAA;AAItB,gBAAc,QAAQ,CAAC,OAAO,UAAU;AACtC,oBAAgB,SAAS,YAAY;AAAA;AAAA,EACvC,CAAC;AACD,kBAAgB;AAEhB,gBAAc,QAAQ,CAAC,UAAU;AAC/B,UAAM,MAAM,KAAK,UAAU,KAAK;AAChC,UAAM,CAAC,UAAU,GAAG,SAAS,IAAI,oBAAoB,IAAI,GAAG;AAC5D,UAAM,YAAY,gBAAgB,cAAc,iBAAiB,KAAK;AACtE,oBAAgB;AAAA,EAAK;AAErB,QAAI,UAAU,QAAQ;AACpB,YAAM,kBAAkB,UAAU;AAAA,QAChC,CAAC,SAAS,gBAAgB,UAAU;AAAA,MACtC;AACA,sBAAgB;AAAA;AAAA,IAAS,gBAAgB,KAAK,IAAI;AAAA,IACpD;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,SAAS,iBAAiB,KAAa,SAAS,GAAG;AACjD,QAAM,aAAa,IAAI,MAAM,MAAM,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE;AACtD,SAAO;AAAA,EACP,OAAO,QAAQ,GAAG,EACjB,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AACf,UAAM,eAAe,cAAc,IAAI,CAAC;AACxC,WAAO,GAAG,aAAa,MAAM;AAAA,EAC/B,CAAC,EACA,KAAK,KAAK;AAAA;AAEb;AAEA,SAAS,qBACP,mBACA,2BACA;AACA,SAAO,IAAI,MAAM,mBAAmB;AAAA,IAClC,IAAI,QAAQ,KAAK;AACf,YAAM,MAAM,QAAQ,IAAI,QAAQ,GAAG;AACnC,UAAI,QAAQ,sBAAsB;AAChC,eAAO,IAAI,MAAM,KAAK;AAAA,UACpB,MAAMC,SAAQ,SAAS,UAAU;AAC/B,kBAAM,UAAU,QAAQ,MAAMA,SAAQ,SAAS,QAAQ;AACvD,mBAAO,sBAAsB,SAAS,yBAAyB;AAAA,UACjE;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEA,SAAS,sBACP,cACA,2BACA;AACA,SAAO,IAAI,MAAM,cAAc;AAAA,IAC7B,IAAI,QAAQ,KAAK;AACf,YAAM,MAAM,QAAQ,IAAI,QAAQ,GAAG;AACnC,UAAI,QAAQ,SAAS;AAEnB,kCAA0B,WAAW;AAAA,UACnC;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;",
|
|
5
|
+
"names": ["key", "target"]
|
|
6
6
|
}
|
|
@@ -35,17 +35,24 @@ async function generateThemes(inputFile) {
|
|
|
35
35
|
Module.prototype.require = ogRequire;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
+
const dedupedTokens = /* @__PURE__ */ new Map();
|
|
38
39
|
function generatedThemesToTypescript(themes) {
|
|
39
|
-
const
|
|
40
|
-
const
|
|
40
|
+
const dedupedThemes = /* @__PURE__ */ new Map();
|
|
41
|
+
const dedupedThemeToNames = /* @__PURE__ */ new Map();
|
|
41
42
|
for (const name in themes) {
|
|
42
43
|
const theme = themes[name];
|
|
44
|
+
for (const [key2, value] of Object.entries(theme)) {
|
|
45
|
+
const uniqueKey = `${name}_${key2}`;
|
|
46
|
+
if (!dedupedTokens.has(value)) {
|
|
47
|
+
dedupedTokens.set(value, uniqueKey);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
43
50
|
const key = JSON.stringify(theme);
|
|
44
|
-
if (
|
|
45
|
-
|
|
51
|
+
if (dedupedThemes.has(key)) {
|
|
52
|
+
dedupedThemeToNames.set(key, [...dedupedThemeToNames.get(key), name]);
|
|
46
53
|
} else {
|
|
47
|
-
|
|
48
|
-
|
|
54
|
+
dedupedThemes.set(key, theme);
|
|
55
|
+
dedupedThemeToNames.set(key, [name]);
|
|
49
56
|
}
|
|
50
57
|
}
|
|
51
58
|
const baseTypeString = `type Theme = {
|
|
@@ -56,9 +63,14 @@ ${Object.entries(themes.light || themes[Object.keys(themes)[0]]).map(([k]) => {
|
|
|
56
63
|
}`;
|
|
57
64
|
let themesString = `${baseTypeString}
|
|
58
65
|
`;
|
|
59
|
-
|
|
66
|
+
dedupedTokens.forEach((names, value) => {
|
|
67
|
+
themesString += `const ${names} = '${value}'
|
|
68
|
+
`;
|
|
69
|
+
});
|
|
70
|
+
themesString += "\n";
|
|
71
|
+
dedupedThemes.forEach((theme) => {
|
|
60
72
|
const key = JSON.stringify(theme);
|
|
61
|
-
const [baseName, ...restNames] =
|
|
73
|
+
const [baseName, ...restNames] = dedupedThemeToNames.get(key);
|
|
62
74
|
const baseTheme = `export const ${baseName} = ${objectToJsString(theme)} as Theme`;
|
|
63
75
|
themesString += `
|
|
64
76
|
${baseTheme}`;
|
|
@@ -76,7 +88,10 @@ ${baseTheme}`;
|
|
|
76
88
|
function objectToJsString(obj, indent = 4) {
|
|
77
89
|
const whitespace = new Array(indent).fill(" ").join("");
|
|
78
90
|
return `{
|
|
79
|
-
${Object.entries(obj).map(([k, v]) =>
|
|
91
|
+
${Object.entries(obj).map(([k, v]) => {
|
|
92
|
+
const variableName = dedupedTokens.get(v);
|
|
93
|
+
return `${whitespace}${k}: ${variableName}`;
|
|
94
|
+
}).join(",\n")}
|
|
80
95
|
}`;
|
|
81
96
|
}
|
|
82
97
|
function createThemeIntercept(createThemeExport, themeBuilderInterceptOpts) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/generate-themes.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAS,YAAY;AAQrB,eAAsB,eAAe,WAAmB;AACtD,UAAQ,4BAA4B,EAAE,SAAS;AAE/C,MAAI,UAAoD;AAExD,QAAM,YAAY,OAAO,UAAU;AAEnC,SAAO,UAAU,UAAU,SAAU,IAAI;AAEvC,UAAM,MAAM,UAAU,MAAM,MAAM,SAAS;AAC3C,QAAI,OAAO,yCAAyC,OAAO,0BAA0B;AACnF,UAAI,CAAC,SAAS;AACZ,YAAI;AACJ,kBAAU,IAAI,QAAQ,CAAC,QAAQ;AAC7B,oBAAU;AAAA,QACZ,CAAC;AACD,eAAO,qBAAqB,KAAK;AAAA,UAC/B,YAAY,CAAC,WAAW;AACtB,+CAAU,OAAO;AAAA,UACnB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,gBACJ,UAAU,CAAC,MAAM,MAAM,KAAK,QAAQ,IAAI,GAAG,SAAS,IAAI;AAC1D,UAAM,iBAAiB,QAAQ,aAAa;AAC5C,UAAM,SAAS,eAAe,SAAS,KAAK,eAAe,QAAQ;AACnE,UAAM,kBAAkB,4BAA4B,MAAM;AAC1D,UAAM,eAAe,UAAU,MAAM,UAAU;AAC/C,WAAO;AAAA,MACL,WAAW;AAAA,MACX,OAAO,6CAAc;AAAA,IACvB;AAAA,EACF,UAAE;AACA,WAAO,UAAU,UAAU;AAAA,EAC7B;AACF;
|
|
5
|
-
"names": ["target"]
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["key", "target"]
|
|
6
6
|
}
|
|
@@ -2,6 +2,7 @@ import { join } from "path";
|
|
|
2
2
|
import * as fs from "fs-extra";
|
|
3
3
|
async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
|
|
4
4
|
const { generated, state } = generatedOutput;
|
|
5
|
+
const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir);
|
|
5
6
|
const themeBuilderStatePath = join(tamaguiDotDir, `theme-builder.json`);
|
|
6
7
|
if (process.env.DEBUG === "tamagui") {
|
|
7
8
|
console.log(`Generated themes:`, JSON.stringify({ generated, state }, null, 2));
|
|
@@ -9,7 +10,7 @@ async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
|
|
|
9
10
|
}
|
|
10
11
|
await Promise.all([
|
|
11
12
|
fs.writeFile(outPath, generated),
|
|
12
|
-
state ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
|
|
13
|
+
state && tamaguiDotDirExists ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
|
|
13
14
|
]);
|
|
14
15
|
}
|
|
15
16
|
export {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/write-generate-themes.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,YAAY;AAErB,YAAY,QAAQ;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,
|
|
4
|
+
"mappings": "AAAA,SAAS,YAAY;AAErB,YAAY,QAAQ;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,SAAS,sBACL,GAAG,UAAU,uBAAuB,KAAK,UAAU,KAAK,CAAC,IACzD;AAAA,EACN,CAAC;AACH;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -2,6 +2,7 @@ import { join } from "path";
|
|
|
2
2
|
import * as fs from "fs-extra";
|
|
3
3
|
async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
|
|
4
4
|
const { generated, state } = generatedOutput;
|
|
5
|
+
const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir);
|
|
5
6
|
const themeBuilderStatePath = join(tamaguiDotDir, `theme-builder.json`);
|
|
6
7
|
if (process.env.DEBUG === "tamagui") {
|
|
7
8
|
console.log(`Generated themes:`, JSON.stringify({ generated, state }, null, 2));
|
|
@@ -9,7 +10,7 @@ async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
|
|
|
9
10
|
}
|
|
10
11
|
await Promise.all([
|
|
11
12
|
fs.writeFile(outPath, generated),
|
|
12
|
-
state ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
|
|
13
|
+
state && tamaguiDotDirExists ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
|
|
13
14
|
]);
|
|
14
15
|
}
|
|
15
16
|
export {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/write-generate-themes.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,YAAY;AAErB,YAAY,QAAQ;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,
|
|
4
|
+
"mappings": "AAAA,SAAS,YAAY;AAErB,YAAY,QAAQ;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,SAAS,sBACL,GAAG,UAAU,uBAAuB,KAAK,UAAU,KAAK,CAAC,IACzD;AAAA,EACN,CAAC;AACH;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/generate-themes",
|
|
3
|
-
"version": "1.39.
|
|
3
|
+
"version": "1.39.6",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"types": "./types/index.d.ts",
|
|
6
6
|
"main": "dist/cjs",
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
"clean:build": "tamagui-build clean:build"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@tamagui/create-theme": "1.39.
|
|
32
|
-
"@tamagui/types": "1.39.
|
|
31
|
+
"@tamagui/create-theme": "1.39.6",
|
|
32
|
+
"@tamagui/types": "1.39.6",
|
|
33
33
|
"esbuild-register": "^3.4.2",
|
|
34
34
|
"fs-extra": "^11.1.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@tamagui/build": "1.39.
|
|
37
|
+
"@tamagui/build": "1.39.6"
|
|
38
38
|
}
|
|
39
39
|
}
|
package/src/generate-themes.ts
CHANGED
|
@@ -49,18 +49,32 @@ export async function generateThemes(inputFile: string) {
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
/**
|
|
53
|
+
* value -> name of variable
|
|
54
|
+
*/
|
|
55
|
+
const dedupedTokens = new Map<string, string>()
|
|
56
|
+
|
|
52
57
|
function generatedThemesToTypescript(themes: Record<string, any>) {
|
|
53
|
-
const
|
|
54
|
-
const
|
|
58
|
+
const dedupedThemes = new Map<string, Object>()
|
|
59
|
+
const dedupedThemeToNames = new Map<string, string[]>()
|
|
55
60
|
|
|
56
61
|
for (const name in themes) {
|
|
57
|
-
const theme = themes[name]
|
|
62
|
+
const theme: Record<string, string> = themes[name]
|
|
63
|
+
|
|
64
|
+
// go through all tokens in current theme and add the new values to dedupedTokens map
|
|
65
|
+
for (const [key, value] of Object.entries(theme)) {
|
|
66
|
+
const uniqueKey = `${name}_${key}`
|
|
67
|
+
if (!dedupedTokens.has(value)) {
|
|
68
|
+
dedupedTokens.set(value, uniqueKey)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
58
72
|
const key = JSON.stringify(theme)
|
|
59
|
-
if (
|
|
60
|
-
|
|
73
|
+
if (dedupedThemes.has(key)) {
|
|
74
|
+
dedupedThemeToNames.set(key, [...dedupedThemeToNames.get(key)!, name])
|
|
61
75
|
} else {
|
|
62
|
-
|
|
63
|
-
|
|
76
|
+
dedupedThemes.set(key, theme)
|
|
77
|
+
dedupedThemeToNames.set(key, [name])
|
|
64
78
|
}
|
|
65
79
|
}
|
|
66
80
|
|
|
@@ -74,9 +88,16 @@ ${Object.entries(themes.light || themes[Object.keys(themes)[0]])
|
|
|
74
88
|
|
|
75
89
|
let themesString = `${baseTypeString}\n`
|
|
76
90
|
|
|
77
|
-
|
|
91
|
+
// add all token variables
|
|
92
|
+
|
|
93
|
+
dedupedTokens.forEach((names, value) => {
|
|
94
|
+
themesString += `const ${names} = '${value}'\n`
|
|
95
|
+
})
|
|
96
|
+
themesString += '\n'
|
|
97
|
+
|
|
98
|
+
dedupedThemes.forEach((theme) => {
|
|
78
99
|
const key = JSON.stringify(theme)
|
|
79
|
-
const [baseName, ...restNames] =
|
|
100
|
+
const [baseName, ...restNames] = dedupedThemeToNames.get(key)!
|
|
80
101
|
const baseTheme = `export const ${baseName} = ${objectToJsString(theme)} as Theme`
|
|
81
102
|
themesString += `\n${baseTheme}`
|
|
82
103
|
|
|
@@ -95,7 +116,10 @@ function objectToJsString(obj: Object, indent = 4) {
|
|
|
95
116
|
const whitespace = new Array(indent).fill(' ').join('')
|
|
96
117
|
return `{
|
|
97
118
|
${Object.entries(obj)
|
|
98
|
-
.map(([k, v]) =>
|
|
119
|
+
.map(([k, v]) => {
|
|
120
|
+
const variableName = dedupedTokens.get(v)
|
|
121
|
+
return `${whitespace}${k}: ${variableName}`
|
|
122
|
+
})
|
|
99
123
|
.join(',\n')}
|
|
100
124
|
}`
|
|
101
125
|
}
|
|
@@ -10,6 +10,7 @@ export async function writeGeneratedThemes(
|
|
|
10
10
|
generatedOutput: Awaited<ReturnType<typeof generateThemes>>
|
|
11
11
|
) {
|
|
12
12
|
const { generated, state } = generatedOutput
|
|
13
|
+
const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir)
|
|
13
14
|
const themeBuilderStatePath = join(tamaguiDotDir, `theme-builder.json`)
|
|
14
15
|
|
|
15
16
|
if (process.env.DEBUG === 'tamagui') {
|
|
@@ -21,6 +22,8 @@ export async function writeGeneratedThemes(
|
|
|
21
22
|
|
|
22
23
|
await Promise.all([
|
|
23
24
|
fs.writeFile(outPath, generated),
|
|
24
|
-
state
|
|
25
|
+
state && tamaguiDotDirExists
|
|
26
|
+
? fs.writeFile(themeBuilderStatePath, JSON.stringify(state))
|
|
27
|
+
: null,
|
|
25
28
|
])
|
|
26
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-generate-themes.d.ts","sourceRoot":"","sources":["../src/write-generate-themes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"write-generate-themes.d.ts","sourceRoot":"","sources":["../src/write-generate-themes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,iBAmB5D"}
|