@terrazzo/plugin-vanilla-extract 2.0.0-alpha.7 → 2.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -5
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -12
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ export default defineConfig({
|
|
|
21
21
|
plugins: [
|
|
22
22
|
css({
|
|
23
23
|
// Optional: control the final CSS variable names
|
|
24
|
-
variableName: (
|
|
24
|
+
variableName: (token) => token.id.replace(/\./g, "-"),
|
|
25
25
|
// Optional: pass `skipBuild: true` to not generate a .css file if only using Vanilla Extract.
|
|
26
26
|
skipBuild: false,
|
|
27
27
|
}),
|
|
@@ -31,14 +31,20 @@ export default defineConfig({
|
|
|
31
31
|
|
|
32
32
|
// generate createTheme()
|
|
33
33
|
themes: [
|
|
34
|
-
{ name: "light",
|
|
35
|
-
{ name: "dark",
|
|
34
|
+
{ name: "light", input: { theme: "light" } },
|
|
35
|
+
{ name: "dark", input: { theme: "dark" } },
|
|
36
36
|
],
|
|
37
37
|
|
|
38
38
|
// generate createGlobalTheme()
|
|
39
39
|
globalThemes: [
|
|
40
|
-
{
|
|
41
|
-
|
|
40
|
+
{
|
|
41
|
+
selector: "@media (prefers-color-scheme: light)",
|
|
42
|
+
input: { theme: "light" },
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
selector: "@media (prefers-color-scheme: dark)",
|
|
46
|
+
input: { theme: "dark" },
|
|
47
|
+
},
|
|
42
48
|
],
|
|
43
49
|
}),
|
|
44
50
|
],
|
package/dist/index.d.ts
CHANGED
|
@@ -29,6 +29,10 @@ interface VanillaExtractPluginOptions {
|
|
|
29
29
|
*/
|
|
30
30
|
themes?: Record<string, {
|
|
31
31
|
mode: string | string[];
|
|
32
|
+
input?: never;
|
|
33
|
+
} | {
|
|
34
|
+
mode?: never;
|
|
35
|
+
input: Record<string, string>;
|
|
32
36
|
}>;
|
|
33
37
|
/**
|
|
34
38
|
* Mapping of exported JS variables to token modes for global themes. The key MUST be a valid JS identifier.
|
|
@@ -45,6 +49,11 @@ interface VanillaExtractPluginOptions {
|
|
|
45
49
|
globalThemes?: Record<string, {
|
|
46
50
|
selector: string;
|
|
47
51
|
mode: string | string[];
|
|
52
|
+
input?: never;
|
|
53
|
+
} | {
|
|
54
|
+
selector: string;
|
|
55
|
+
mode?: never;
|
|
56
|
+
input: Record<string, string>;
|
|
48
57
|
}>;
|
|
49
58
|
/**
|
|
50
59
|
* Change the naming strategy for the createTheme() API’s `[class, vars]` tuple.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/lib.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;cAIa,SAAA;cACA,YAAA;AADA,UAGI,2BAAA,CAHK;EACT;AAEb
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/lib.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;cAIa,SAAA;cACA,YAAA;AADA,UAGI,2BAAA,CAHK;EACT;AAEb;;;EA6De,QAAA,CAAA,EAAA,MAAA;EAZE;;AAuBjB;AAOA;AAQA;EACE,mBAAA,CAAA,EAAA,OAAA;EACA;;;AAyCF;;;;;;;;AAsDA;EAyCgB,MAAA,CAAA,EAzML,MAyMK,CAAA,MAAA,EAAoB;;;;ICxNZ,IAAA,CAAA,EAAA,KAAA;WDyBT;;;;;;;;;;;;;;iBAeE;;;;;;;WAYF;;;;;;;;cAWF;;;;;;iBAOG,SAAA;;iBAQA,qBAAA;;;;UAIN;;;;iBAuCM,aAAA;;;;;;;;;UASN;;;;;iBA6CM,cAAA,2CAAyD;;iBAyCzD,oBAAA;;;AApOH,iBCYW,oBAAA,CDZF,OAAA,ECYgC,2BDZhC,CAAA,ECY8D,MDZ9D"}
|
package/dist/index.js
CHANGED
|
@@ -65,7 +65,7 @@ const IDENT_ESCAPE = "__ident__";
|
|
|
65
65
|
/** Encode an alias to a Vanilla Extract token inside a JSON array */
|
|
66
66
|
function serializeValue(value, tokens) {
|
|
67
67
|
if (typeof value === "number" || typeof value === "boolean") return String(value);
|
|
68
|
-
const [_, varName] = value.match(/^var\((
|
|
68
|
+
const [_, varName] = value.match(/^var\(([^)]+)\)$/) ?? [];
|
|
69
69
|
if (varName) {
|
|
70
70
|
const originalToken = tokens.find((t) => t.type === "MULTI_VALUE" && t.value.__cssName === varName);
|
|
71
71
|
if (!originalToken) throw new Error(`Can’t find token associated with ${value}`);
|
|
@@ -85,24 +85,66 @@ function deserializeAllValues(json) {
|
|
|
85
85
|
|
|
86
86
|
//#endregion
|
|
87
87
|
//#region src/index.ts
|
|
88
|
+
const PLUGIN_NAME = "@terrazzo/plugin-vanilla-extract";
|
|
88
89
|
function vanillaExtractPlugin(options) {
|
|
89
90
|
const filename = options.filename ?? "theme.css.ts";
|
|
90
91
|
const globalThemeContract = options.globalThemeContract ?? true;
|
|
92
|
+
let isResolver = false;
|
|
91
93
|
return {
|
|
92
|
-
name:
|
|
94
|
+
name: PLUGIN_NAME,
|
|
93
95
|
enforce: "post",
|
|
94
|
-
config(config) {
|
|
95
|
-
if (!config.plugins.some((p) => p.name === "@terrazzo/plugin-css"))
|
|
96
|
+
config(config, { logger }) {
|
|
97
|
+
if (!config.plugins.some((p) => p.name === "@terrazzo/plugin-css")) logger.error({
|
|
98
|
+
group: "plugin",
|
|
99
|
+
label: PLUGIN_NAME,
|
|
100
|
+
message: "@terrazzo/plugin-css missing! Please install and add to the plugins array to use the Vanilla Extract plugin."
|
|
101
|
+
});
|
|
96
102
|
const allThemes = {
|
|
97
103
|
...options.themes,
|
|
98
104
|
...options.globalThemes
|
|
99
105
|
};
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
isResolver = Object.values(allThemes).every((t) => t.input);
|
|
107
|
+
if (!Object.keys(allThemes).length) logger.error({
|
|
108
|
+
group: "plugin",
|
|
109
|
+
label: PLUGIN_NAME,
|
|
110
|
+
message: "Must generate at least one theme in \"themes\" or \"globalThemes\"."
|
|
111
|
+
});
|
|
112
|
+
for (const k of Object.keys(allThemes)) {
|
|
113
|
+
if (!isJSIdent(k)) logger.error({
|
|
114
|
+
group: "plugin",
|
|
115
|
+
label: PLUGIN_NAME,
|
|
116
|
+
message: `${JSON.stringify(k)} must be a valid JS identifier. Prefer camelCase so it may be used in JS.`
|
|
117
|
+
});
|
|
118
|
+
if (isResolver && allThemes[k].mode) logger.error({
|
|
119
|
+
group: "plugin",
|
|
120
|
+
label: PLUGIN_NAME,
|
|
121
|
+
message: `${k}: Can’t use "mode" while other themes use "input". Use either "mode" or "input" globally.`
|
|
122
|
+
});
|
|
123
|
+
}
|
|
102
124
|
},
|
|
103
125
|
async transform({ getTransforms, setTransform }) {
|
|
126
|
+
if (isResolver) {
|
|
127
|
+
for (const { input } of Object.values(options.themes ?? options.globalThemes ?? {})) for (const token of getTransforms({
|
|
128
|
+
format: FORMAT_ID$1,
|
|
129
|
+
input
|
|
130
|
+
})) {
|
|
131
|
+
const localID = token.token.jsonID.slice(2).split("/").map((part) => camelCase(part)).join(".");
|
|
132
|
+
const value = {
|
|
133
|
+
...token.type === "SINGLE_VALUE" ? { ".": token.value } : { ...token.value },
|
|
134
|
+
__cssName: token.localID
|
|
135
|
+
};
|
|
136
|
+
setTransform(token.id, {
|
|
137
|
+
format: FORMAT_ID,
|
|
138
|
+
localID,
|
|
139
|
+
value,
|
|
140
|
+
input,
|
|
141
|
+
meta: { "token-listing": { name: `vars.${localID}` } }
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
104
146
|
for (const token of getTransforms({ format: FORMAT_ID$1 })) {
|
|
105
|
-
const localID = token.
|
|
147
|
+
const localID = token.token.jsonID.slice(2).split("/").map((part) => camelCase(part)).join(".");
|
|
106
148
|
const value = {
|
|
107
149
|
...token.type === "SINGLE_VALUE" ? { ".": token.value } : { ...token.value },
|
|
108
150
|
__cssName: token.localID
|
|
@@ -119,34 +161,35 @@ function vanillaExtractPlugin(options) {
|
|
|
119
161
|
async build({ getTransforms, outputFile }) {
|
|
120
162
|
const imports = /* @__PURE__ */ new Set();
|
|
121
163
|
const output = [];
|
|
164
|
+
const firstInput = Object.values(options.globalThemes ?? options.themes ?? {})[0]?.input ?? {};
|
|
122
165
|
output.push(generateThemeContract({
|
|
123
166
|
tokens: getTransforms({
|
|
124
167
|
format: FORMAT_ID,
|
|
125
|
-
mode: "."
|
|
168
|
+
...isResolver ? { input: firstInput } : { mode: "." }
|
|
126
169
|
}),
|
|
127
170
|
globalThemeContract
|
|
128
171
|
}));
|
|
129
172
|
imports.add(globalThemeContract ? VE.createGlobalThemeContract : VE.createThemeContract);
|
|
130
173
|
const namingPattern = options?.themeVarNaming ?? ((n) => [`${n}Class`, n]);
|
|
131
|
-
for (const [name, { mode }] of Object.entries(options.themes ?? {})) {
|
|
174
|
+
for (const [name, { mode, input }] of Object.entries(options.themes ?? {})) {
|
|
132
175
|
const theme = generateTheme({
|
|
133
176
|
name,
|
|
134
177
|
namingPattern,
|
|
135
178
|
tokens: getTransforms({
|
|
136
179
|
format: FORMAT_ID,
|
|
137
|
-
mode
|
|
180
|
+
...mode ? { mode } : { input }
|
|
138
181
|
})
|
|
139
182
|
});
|
|
140
183
|
imports.add(VE.createTheme);
|
|
141
184
|
output.push(theme);
|
|
142
185
|
}
|
|
143
|
-
for (const [name, { selector, mode }] of Object.entries(options.globalThemes ?? {})) {
|
|
186
|
+
for (const [name, { selector, mode, input }] of Object.entries(options.globalThemes ?? {})) {
|
|
144
187
|
const theme = generateTheme({
|
|
145
188
|
name,
|
|
146
189
|
namingPattern,
|
|
147
190
|
tokens: getTransforms({
|
|
148
191
|
format: FORMAT_ID,
|
|
149
|
-
mode
|
|
192
|
+
...mode ? { mode } : { input }
|
|
150
193
|
}),
|
|
151
194
|
selector,
|
|
152
195
|
globalTheme: true
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["tokensObj: any","name","FORMAT_CSS","FORMAT_VANILLA","output: string[]"],"sources":["../src/lib.ts","../src/index.ts"],"sourcesContent":["import type { TokenTransformed } from '@terrazzo/parser';\nimport type ve from '@vanilla-extract/css';\nimport { camelCase } from 'scule';\n\nexport const FORMAT_ID = 'vanilla-extract';\nexport const THEME_EXPORT = 'vars'; // Could be a future option, for now match docs\n\nexport interface VanillaExtractPluginOptions {\n /**\n * Filename to generate.\n * @default \"theme.css.ts\"\n */\n filename?: string;\n /**\n * - true: use global `createGlobalThemeContract()` API\n * - false: use scoped `createThemeContract()` API\n * @default true\n */\n globalThemeContract?: boolean;\n /**\n * Mapping of exported JS variables to token modes. The key MUST be a valid JS identifier.\n * @example\n *\n * ```js\n * themes: {\n * default: { mode: \".\" }, // \".\" refers to the default mode, or no mode\n * light: { mode: \"light\" },\n * dark: { mode: \"dark\" },\n * }\n * ```\n */\n themes?: Record<string, { mode: string | string[] }>;\n /**\n * Mapping of exported JS variables to token modes for global themes. The key MUST be a valid JS identifier.\n * @example\n *\n * ```js\n * globalThemes: {\n * default: { selector: \":root\", mode: \".\" }, // \".\" refers to the default mode, or no mode\n * light: { selector: \"[data-color-mode=light]\", mode: \"light\" },\n * dark: { selector: \"[data-color-mode=dark]\" mode: \"dark\" },\n * }\n * ```\n */\n globalThemes?: Record<string, { selector: string; mode: string | string[] }>;\n /**\n * Change the naming strategy for the createTheme() API’s `[class, vars]` tuple.\n * @default (name) => [`${name}Class`, name]\n */\n themeVarNaming?: (name: string) => [string, string];\n}\n\n// imports saved as a constant to prevent typos\nexport const VE = {\n createTheme: 'createTheme',\n createGlobalTheme: 'createGlobalTheme',\n createThemeContract: 'createThemeContract',\n createGlobalThemeContract: 'createGlobalThemeContract',\n} satisfies Partial<Record<keyof typeof ve, string>>;\n\nexport function isJSIdent(ident: unknown): boolean {\n if (typeof ident !== 'string') {\n return false;\n }\n return /^[A-Za-z$_][A-Za-z0-9_$]*$/.test(ident);\n}\n\n/** Generate createThemeContract() or createGlobalThemeContract() */\nexport function generateThemeContract({\n tokens,\n globalThemeContract,\n}: {\n tokens: TokenTransformed[];\n globalThemeContract: boolean;\n}): string {\n const tokensObj: any = {};\n for (const token of tokens) {\n const parts = token.localID!.split('.');\n const name = parts.pop()!;\n\n // rebuild nested object again from flattened tokens array\n let node = tokensObj;\n for (const part of parts) {\n if (!(part in node)) {\n node[part] = {};\n }\n node = node[part];\n }\n if (token.type !== 'MULTI_VALUE') {\n throw new Error('Error in plugin-vanilla-extract: values didn’t generate correctly.');\n }\n const cssName = token.value.__cssName?.replace(/^--/, '');\n if ('.' in token.value) {\n node[name] = globalThemeContract ? cssName : null;\n } else {\n node[name] = {};\n for (const k of Object.keys(token.value)) {\n if (k === '__cssName') {\n continue;\n }\n node[name][camelCase(k)] = globalThemeContract ? `${cssName}-${k}` : null;\n }\n }\n }\n\n return `export const ${THEME_EXPORT} = ${globalThemeContract ? VE.createGlobalThemeContract : VE.createThemeContract}(${JSON.stringify(tokensObj, undefined, 2)});\\n`;\n}\n\n/** Generate createTheme()/createGlobalTheme() */\nexport function generateTheme({\n name,\n namingPattern,\n tokens,\n selector,\n globalTheme = false,\n}: {\n name: string;\n namingPattern: (name: string) => [string, string];\n tokens: TokenTransformed[];\n selector?: string;\n globalTheme?: boolean;\n}) {\n const tokensObj: any = {};\n for (const token of tokens) {\n const parts = token.localID!.split('.');\n const name = parts.pop()!;\n\n // rebuild nested object again from flattened tokens array\n let node = tokensObj;\n for (const part of parts) {\n if (!(part in node)) {\n node[part] = {};\n }\n node = node[part];\n }\n if (token.type === 'MULTI_VALUE') {\n if ('.' in token.value) {\n node[name] = serializeValue(token.value['.'], tokens);\n } else {\n node[name] = {};\n for (const [k, v] of Object.entries(token.value)) {\n if (k === '__cssName') {\n continue;\n }\n node[name][camelCase(k)] = serializeValue(v, tokens);\n }\n }\n } else {\n node[name] = serializeValue(token.value, tokens);\n }\n }\n\n const ident = globalTheme ? `${name}` : `[${namingPattern(name)[0]}, ${namingPattern(name)[1]}]`;\n const prefix = globalTheme\n ? `${VE.createGlobalTheme}(${JSON.stringify(selector)}, ${THEME_EXPORT}, `\n : `${VE.createTheme}(${THEME_EXPORT}, `;\n const rawTokens = JSON.stringify(tokensObj, undefined, 2);\n return `export const ${ident} = ${prefix}${deserializeAllValues(rawTokens)});\\n`;\n}\n\nconst IDENT_ESCAPE = '__ident__';\n\n/** Encode an alias to a Vanilla Extract token inside a JSON array */\nexport function serializeValue(value: string | number | boolean, tokens: TokenTransformed[]): string {\n // raw values: number / boolean\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n // aliases\n // ⚠️ Warning! Trying to simply transform CSS vars to IDs is brittle, error-prone, and will break in many conditions.\n // However, reverse lookups from generated CSS vars is stable and safe. Subtle but important difference.\n const [_, varName] = value.match(/^var\\((.*)\\)$/) ?? [];\n if (varName) {\n const originalToken = tokens.find((t) => t.type === 'MULTI_VALUE' && t.value.__cssName === varName);\n if (!originalToken) {\n throw new Error(`Can’t find token associated with ${value}`);\n }\n let jsIdent = '';\n const parts = originalToken.localID!.split('.');\n for (const part of parts) {\n if (!isJSIdent(part)) {\n // Note: there are probably some token IDs with quotation marks in them that this\n // would break on, but also, how dare you, you monster\n jsIdent += /^[1-9][0-9]*$/.test(part) ? `[${part}]` : `['${part.replace(/'/g, \"\\\\'\")}']`;\n } else {\n jsIdent += `.${part}`;\n }\n }\n return `${IDENT_ESCAPE}${THEME_EXPORT}${jsIdent}${IDENT_ESCAPE}`;\n }\n\n // special case: zero\n if (/^0[A-Z]+/i.test(value)) {\n return '0';\n }\n // special case: px converts to numbers\n // if (/^\\d+px/i.test(value)) {\n // return Number.parseFloat(value);\n // }\n return value;\n}\n\n/** Decode all aliases from a JSON string */\nexport function deserializeAllValues(json: string): string {\n return json.replace(/\"__ident__(.*)__ident__\"/g, '$1');\n}\n","import type { Plugin } from '@terrazzo/parser';\nimport { FORMAT_ID as FORMAT_CSS } from '@terrazzo/plugin-css';\nimport { camelCase } from 'scule';\nimport {\n FORMAT_ID as FORMAT_VANILLA,\n generateTheme,\n generateThemeContract,\n isJSIdent,\n type VanillaExtractPluginOptions,\n VE,\n} from './lib.js';\n\nexport * from './lib.js';\n\nexport default function vanillaExtractPlugin(options: VanillaExtractPluginOptions): Plugin {\n const filename = options.filename ?? 'theme.css.ts';\n const globalThemeContract = options.globalThemeContract ?? true;\n\n return {\n name: '@terrazzo/plugin-vanilla-extract',\n enforce: 'post', // ensure this comes after @terrazzo/plugin-css\n config(config) {\n if (!config.plugins.some((p) => p.name === '@terrazzo/plugin-css')) {\n throw new Error(\n '@terrazzo/plugin-css missing! Please install and add to the plugins array to use the Vanilla Extract plugin.',\n );\n }\n const allThemes = { ...options.themes, ...options.globalThemes };\n if (!Object.keys(allThemes).length) {\n throw new Error('Must generate at least one theme in \"themes\" or \"globalThemes\".');\n }\n for (const k of Object.keys(allThemes)) {\n if (!isJSIdent(k)) {\n throw new Error(\n `${JSON.stringify(k)} must be a valid JS identifier. Prefer camelCase so it may be used in JS.`,\n );\n }\n }\n },\n\n async transform({ getTransforms, setTransform }) {\n // vanilla-extract’s transform works a little-differently than other plugins.\n // First, the localID is the same as the source, only we camelCase it for\n // convenience.\n // Second, we’re borrowing the values from plugin-css, but also keeping\n // its localID, too, for later.\n for (const token of getTransforms({ format: FORMAT_CSS })) {\n const localID = token.id\n .split('.')\n .map((part) => camelCase(part))\n .join('.');\n const value = {\n ...(token.type === 'SINGLE_VALUE' ? { '.': token.value } : { ...token.value }),\n __cssName: token.localID!,\n };\n setTransform(token.id, {\n format: FORMAT_VANILLA,\n localID,\n value,\n mode: token.mode,\n meta: { 'token-listing': { name: `vars.${localID}` } },\n });\n }\n },\n\n async build({ getTransforms, outputFile }) {\n const imports = new Set<string>();\n const output: string[] = [];\n\n // generate theme contract\n output.push(\n generateThemeContract({\n tokens: getTransforms({ format: FORMAT_VANILLA, mode: '.' }),\n globalThemeContract,\n }),\n );\n imports.add(globalThemeContract ? VE.createGlobalThemeContract : VE.createThemeContract);\n\n // generate themes/global themes\n const namingPattern = options?.themeVarNaming ?? ((n) => [`${n}Class`, n]);\n for (const [name, { mode }] of Object.entries(options.themes ?? {})) {\n const theme = generateTheme({ name, namingPattern, tokens: getTransforms({ format: FORMAT_VANILLA, mode }) });\n imports.add(VE.createTheme);\n output.push(theme);\n }\n for (const [name, { selector, mode }] of Object.entries(options.globalThemes ?? {})) {\n const theme = generateTheme({\n name,\n namingPattern,\n tokens: getTransforms({ format: FORMAT_VANILLA, mode }),\n selector,\n globalTheme: true,\n });\n imports.add(VE.createGlobalTheme);\n output.push(theme);\n }\n\n outputFile(\n filename,\n [`import { ${[...imports].sort().join(', ')} } from \"@vanilla-extract/css\";`, '', ...output].join('\\n'),\n );\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["name","FORMAT_CSS","FORMAT_VANILLA"],"sources":["../src/lib.ts","../src/index.ts"],"sourcesContent":["import type { TokenTransformed } from '@terrazzo/parser';\nimport type ve from '@vanilla-extract/css';\nimport { camelCase } from 'scule';\n\nexport const FORMAT_ID = 'vanilla-extract';\nexport const THEME_EXPORT = 'vars'; // Could be a future option, for now match docs\n\nexport interface VanillaExtractPluginOptions {\n /**\n * Filename to generate.\n * @default \"theme.css.ts\"\n */\n filename?: string;\n /**\n * - true: use global `createGlobalThemeContract()` API\n * - false: use scoped `createThemeContract()` API\n * @default true\n */\n globalThemeContract?: boolean;\n /**\n * Mapping of exported JS variables to token modes. The key MUST be a valid JS identifier.\n * @example\n *\n * ```js\n * themes: {\n * default: { mode: \".\" }, // \".\" refers to the default mode, or no mode\n * light: { mode: \"light\" },\n * dark: { mode: \"dark\" },\n * }\n * ```\n */\n themes?: Record<\n string,\n | {\n /* @deprecated */\n mode: string | string[];\n input?: never;\n }\n | {\n /* @deprecated */\n mode?: never;\n input: Record<string, string>;\n }\n >;\n /**\n * Mapping of exported JS variables to token modes for global themes. The key MUST be a valid JS identifier.\n * @example\n *\n * ```js\n * globalThemes: {\n * default: { selector: \":root\", mode: \".\" }, // \".\" refers to the default mode, or no mode\n * light: { selector: \"[data-color-mode=light]\", mode: \"light\" },\n * dark: { selector: \"[data-color-mode=dark]\" mode: \"dark\" },\n * }\n * ```\n */\n globalThemes?: Record<\n string,\n | {\n selector: string;\n /* @deprecated */\n mode: string | string[];\n input?: never;\n }\n | {\n selector: string;\n /* @deprecated */\n mode?: never;\n input: Record<string, string>;\n }\n >;\n /**\n * Change the naming strategy for the createTheme() API’s `[class, vars]` tuple.\n * @default (name) => [`${name}Class`, name]\n */\n themeVarNaming?: (name: string) => [string, string];\n}\n\n// imports saved as a constant to prevent typos\nexport const VE = {\n createTheme: 'createTheme',\n createGlobalTheme: 'createGlobalTheme',\n createThemeContract: 'createThemeContract',\n createGlobalThemeContract: 'createGlobalThemeContract',\n} satisfies Partial<Record<keyof typeof ve, string>>;\n\nexport function isJSIdent(ident: unknown): boolean {\n if (typeof ident !== 'string') {\n return false;\n }\n return /^[A-Za-z$_][A-Za-z0-9_$]*$/.test(ident);\n}\n\n/** Generate createThemeContract() or createGlobalThemeContract() */\nexport function generateThemeContract({\n tokens,\n globalThemeContract,\n}: {\n tokens: TokenTransformed[];\n globalThemeContract: boolean;\n}): string {\n const tokensObj: any = {};\n for (const token of tokens) {\n const parts = token.localID!.split('.');\n const name = parts.pop()!;\n\n // rebuild nested object again from flattened tokens array\n let node = tokensObj;\n for (const part of parts) {\n if (!(part in node)) {\n node[part] = {};\n }\n node = node[part];\n }\n\n if (token.type !== 'MULTI_VALUE') {\n throw new Error('Error in plugin-vanilla-extract: values didn’t generate correctly.');\n }\n\n const cssName = token.value.__cssName?.replace(/^--/, '');\n if ('.' in token.value) {\n node[name] = globalThemeContract ? cssName : null;\n } else {\n node[name] = {};\n for (const k of Object.keys(token.value)) {\n if (k === '__cssName') {\n continue;\n }\n node[name][camelCase(k)] = globalThemeContract ? `${cssName}-${k}` : null;\n }\n }\n }\n\n return `export const ${THEME_EXPORT} = ${globalThemeContract ? VE.createGlobalThemeContract : VE.createThemeContract}(${JSON.stringify(tokensObj, undefined, 2)});\\n`;\n}\n\n/** Generate createTheme()/createGlobalTheme() */\nexport function generateTheme({\n name,\n namingPattern,\n tokens,\n selector,\n globalTheme = false,\n}: {\n name: string;\n namingPattern: (name: string) => [string, string];\n tokens: TokenTransformed[];\n selector?: string;\n globalTheme?: boolean;\n}) {\n const tokensObj: any = {};\n for (const token of tokens) {\n const parts = token.localID!.split('.');\n const name = parts.pop()!;\n\n // rebuild nested object again from flattened tokens array\n let node = tokensObj;\n for (const part of parts) {\n if (!(part in node)) {\n node[part] = {};\n }\n node = node[part];\n }\n if (token.type === 'MULTI_VALUE') {\n if ('.' in token.value) {\n node[name] = serializeValue(token.value['.'], tokens);\n } else {\n node[name] = {};\n for (const [k, v] of Object.entries(token.value)) {\n if (k === '__cssName') {\n continue;\n }\n node[name][camelCase(k)] = serializeValue(v, tokens);\n }\n }\n } else {\n node[name] = serializeValue(token.value, tokens);\n }\n }\n\n const ident = globalTheme ? `${name}` : `[${namingPattern(name)[0]}, ${namingPattern(name)[1]}]`;\n const prefix = globalTheme\n ? `${VE.createGlobalTheme}(${JSON.stringify(selector)}, ${THEME_EXPORT}, `\n : `${VE.createTheme}(${THEME_EXPORT}, `;\n const rawTokens = JSON.stringify(tokensObj, undefined, 2);\n return `export const ${ident} = ${prefix}${deserializeAllValues(rawTokens)});\\n`;\n}\n\nconst IDENT_ESCAPE = '__ident__';\n\n/** Encode an alias to a Vanilla Extract token inside a JSON array */\nexport function serializeValue(value: string | number | boolean, tokens: TokenTransformed[]): string {\n // raw values: number / boolean\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n // aliases\n // ⚠️ Warning! Trying to simply transform CSS vars to IDs is brittle, error-prone, and will break in many conditions.\n // However, reverse lookups from generated CSS vars is stable and safe. Subtle but important difference.\n const [_, varName] = value.match(/^var\\(([^)]+)\\)$/) ?? [];\n if (varName) {\n const originalToken = tokens.find((t) => t.type === 'MULTI_VALUE' && t.value.__cssName === varName);\n if (!originalToken) {\n throw new Error(`Can’t find token associated with ${value}`);\n }\n let jsIdent = '';\n const parts = originalToken.localID!.split('.');\n for (const part of parts) {\n if (!isJSIdent(part)) {\n // Note: there are probably some token IDs with quotation marks in them that this\n // would break on, but also, how dare you, you monster\n jsIdent += /^[1-9][0-9]*$/.test(part) ? `[${part}]` : `['${part.replace(/'/g, \"\\\\'\")}']`;\n } else {\n jsIdent += `.${part}`;\n }\n }\n return `${IDENT_ESCAPE}${THEME_EXPORT}${jsIdent}${IDENT_ESCAPE}`;\n }\n\n // special case: zero\n if (/^0[A-Z]+/i.test(value)) {\n return '0';\n }\n // special case: px converts to numbers\n // if (/^\\d+px/i.test(value)) {\n // return Number.parseFloat(value);\n // }\n return value;\n}\n\n/** Decode all aliases from a JSON string */\nexport function deserializeAllValues(json: string): string {\n return json.replace(/\"__ident__(.*)__ident__\"/g, '$1');\n}\n","import type { Plugin } from '@terrazzo/parser';\nimport { FORMAT_ID as FORMAT_CSS } from '@terrazzo/plugin-css';\nimport { camelCase } from 'scule';\nimport {\n FORMAT_ID as FORMAT_VANILLA,\n generateTheme,\n generateThemeContract,\n isJSIdent,\n type VanillaExtractPluginOptions,\n VE,\n} from './lib.js';\n\nexport * from './lib.js';\n\nconst PLUGIN_NAME = '@terrazzo/plugin-vanilla-extract';\n\nexport default function vanillaExtractPlugin(options: VanillaExtractPluginOptions): Plugin {\n const filename = options.filename ?? 'theme.css.ts';\n const globalThemeContract = options.globalThemeContract ?? true;\n let isResolver = false;\n\n return {\n name: PLUGIN_NAME,\n enforce: 'post', // ensure this comes after @terrazzo/plugin-css\n config(config, { logger }) {\n if (!config.plugins.some((p) => p.name === '@terrazzo/plugin-css')) {\n logger.error({\n group: 'plugin',\n label: PLUGIN_NAME,\n message:\n '@terrazzo/plugin-css missing! Please install and add to the plugins array to use the Vanilla Extract plugin.',\n });\n }\n const allThemes = { ...options.themes, ...options.globalThemes };\n isResolver = Object.values(allThemes).every((t) => t.input);\n\n if (!Object.keys(allThemes).length) {\n logger.error({\n group: 'plugin',\n label: PLUGIN_NAME,\n message: 'Must generate at least one theme in \"themes\" or \"globalThemes\".',\n });\n }\n for (const k of Object.keys(allThemes)) {\n if (!isJSIdent(k)) {\n logger.error({\n group: 'plugin',\n label: PLUGIN_NAME,\n message: `${JSON.stringify(k)} must be a valid JS identifier. Prefer camelCase so it may be used in JS.`,\n });\n }\n if (isResolver && allThemes[k]!.mode) {\n logger.error({\n group: 'plugin',\n label: PLUGIN_NAME,\n message: `${k}: Can’t use \"mode\" while other themes use \"input\". Use either \"mode\" or \"input\" globally.`,\n });\n }\n }\n },\n\n async transform({ getTransforms, setTransform }) {\n if (isResolver) {\n for (const { input } of Object.values(options.themes ?? options.globalThemes ?? {})) {\n for (const token of getTransforms({ format: FORMAT_CSS, input })) {\n const localID = token.token.jsonID // use jsonID to account for $root tokens\n .slice(2)\n .split('/')\n .map((part) => camelCase(part))\n .join('.');\n const value = {\n ...(token.type === 'SINGLE_VALUE' ? { '.': token.value } : { ...token.value }),\n __cssName: token.localID!,\n };\n setTransform(token.id, {\n format: FORMAT_VANILLA,\n localID,\n value,\n input,\n meta: { 'token-listing': { name: `vars.${localID}` } },\n });\n }\n }\n return;\n }\n\n // legacy modes\n // deprecate in 3.0\n for (const token of getTransforms({ format: FORMAT_CSS })) {\n const localID = token.token.jsonID // use jsonID to account for $root tokens\n .slice(2)\n .split('/')\n .map((part) => camelCase(part))\n .join('.');\n const value = {\n ...(token.type === 'SINGLE_VALUE' ? { '.': token.value } : { ...token.value }),\n __cssName: token.localID!,\n };\n setTransform(token.id, {\n format: FORMAT_VANILLA,\n localID,\n value,\n mode: token.mode,\n meta: { 'token-listing': { name: `vars.${localID}` } },\n });\n }\n },\n\n async build({ getTransforms, outputFile }) {\n const imports = new Set<string>();\n const output: string[] = [];\n\n // generate theme contract\n const firstInput = Object.values(options.globalThemes ?? options.themes ?? {})[0]?.input ?? {};\n output.push(\n generateThemeContract({\n tokens: getTransforms({\n format: FORMAT_VANILLA,\n ...(isResolver ? { input: firstInput } : { mode: '.' }),\n }),\n globalThemeContract,\n }),\n );\n imports.add(globalThemeContract ? VE.createGlobalThemeContract : VE.createThemeContract);\n\n // generate themes/global themes\n const namingPattern = options?.themeVarNaming ?? ((n) => [`${n}Class`, n]);\n for (const [name, { mode, input }] of Object.entries(options.themes ?? {})) {\n const theme = generateTheme({\n name,\n namingPattern,\n tokens: getTransforms({\n format: FORMAT_VANILLA,\n ...(mode ? { mode } : { input }),\n }),\n });\n imports.add(VE.createTheme);\n output.push(theme);\n }\n for (const [name, { selector, mode, input }] of Object.entries(options.globalThemes ?? {})) {\n const theme = generateTheme({\n name,\n namingPattern,\n tokens: getTransforms({\n format: FORMAT_VANILLA,\n ...(mode ? { mode } : { input }),\n }),\n selector,\n globalTheme: true,\n });\n imports.add(VE.createGlobalTheme);\n output.push(theme);\n }\n\n outputFile(\n filename,\n [`import { ${[...imports].sort().join(', ')} } from \"@vanilla-extract/css\";`, '', ...output].join('\\n'),\n );\n },\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@terrazzo/plugin-vanilla-extract",
|
|
3
|
-
"version": "2.0.0-
|
|
3
|
+
"version": "2.0.0-beta.0",
|
|
4
4
|
"description": "Generate Vanilla Extract themes from DTCG design tokens.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -28,23 +28,23 @@
|
|
|
28
28
|
"directory": "./packages/plugin-vanilla-extract/"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"@terrazzo/cli": "^2.0.0-
|
|
32
|
-
"@terrazzo/parser": "^2.0.0-
|
|
33
|
-
"@terrazzo/plugin-css": "^2.0.0-
|
|
31
|
+
"@terrazzo/cli": "^2.0.0-beta.0",
|
|
32
|
+
"@terrazzo/parser": "^2.0.0-beta.0",
|
|
33
|
+
"@terrazzo/plugin-css": "^2.0.0-beta.0"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"scule": "^1.3.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@types/react": "^19.2.
|
|
39
|
+
"@types/react": "^19.2.8",
|
|
40
40
|
"@types/react-dom": "^19.2.3",
|
|
41
|
-
"@vanilla-extract/css": "^1.
|
|
42
|
-
"@vanilla-extract/vite-plugin": "^5.1.
|
|
43
|
-
"dtcg-examples": "^0.
|
|
41
|
+
"@vanilla-extract/css": "^1.18.0",
|
|
42
|
+
"@vanilla-extract/vite-plugin": "^5.1.4",
|
|
43
|
+
"dtcg-examples": "^1.0.2",
|
|
44
44
|
"react": "^19.2.3",
|
|
45
45
|
"react-dom": "^19.2.3",
|
|
46
|
-
"@terrazzo/cli": "^2.0.0-
|
|
47
|
-
"@terrazzo/parser": "^2.0.0-
|
|
46
|
+
"@terrazzo/cli": "^2.0.0-beta.0",
|
|
47
|
+
"@terrazzo/parser": "^2.0.0-beta.0"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
50
|
"build": "rolldown -c && attw --profile esm-only --pack .",
|