@terrazzo/plugin-tailwind 2.0.0-beta.3 → 2.0.0-beta.4
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/CHANGELOG.md +2 -0
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -7
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
- [#530](https://github.com/terrazzoapp/terrazzo/pull/530) [`370ed7b`](https://github.com/terrazzoapp/terrazzo/commit/370ed7b0f578a64824124145d7f4936536b37bb3) Thanks [@drwpow](https://github.com/drwpow)! - ⚠️ [Plugin API] Minor breaking change: token.originalValue may be undefined for tokens created with $ref. This shouldn’t affect any tokens or plugins not using $refs. But going forward this value will be missing if the token was created dynamically via $ref.
|
|
12
12
|
|
|
13
|
+
- [#646](https://github.com/terrazzoapp/terrazzo/pull/646) [`fd9de2b`](https://github.com/terrazzoapp/terrazzo/commit/fd9de2b4a93f42e1f1bfd81cf4a63475b506488d) Thanks [@9rotama](https://github.com/9rotama)! - feat: add template option to plugin-tailwind
|
|
14
|
+
|
|
13
15
|
### Patch Changes
|
|
14
16
|
|
|
15
17
|
- [#530](https://github.com/terrazzoapp/terrazzo/pull/530) [`370ed7b`](https://github.com/terrazzoapp/terrazzo/commit/370ed7b0f578a64824124145d7f4936536b37bb3) Thanks [@drwpow](https://github.com/drwpow)! - Validation moved to lint rules, which means token validation can be individually configured, and optionally extended.
|
package/dist/index.d.ts
CHANGED
|
@@ -7,8 +7,13 @@ interface TailwindPluginOptions {
|
|
|
7
7
|
* @default "tailwind-theme.css"
|
|
8
8
|
*/
|
|
9
9
|
filename?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Path to a template file. The template should contain `@terrazzo-slot;`
|
|
12
|
+
* which will be replaced with the generated theme.
|
|
13
|
+
*/
|
|
14
|
+
template?: string;
|
|
10
15
|
/** @see https://tailwindcss.com/docs/theme */
|
|
11
|
-
theme: Record<string,
|
|
16
|
+
theme: Record<string, unknown>;
|
|
12
17
|
/** Array of mapping variants to DTCG modes. */
|
|
13
18
|
modeVariants?: {
|
|
14
19
|
variant: string;
|
|
@@ -20,10 +25,14 @@ declare function flattenThemeObj(themeObj: Record<string, unknown>): {
|
|
|
20
25
|
path: string[];
|
|
21
26
|
value: string | string[];
|
|
22
27
|
}[];
|
|
28
|
+
declare const FILE_HEADER = "/* -------------------------------------------\n * Autogenerated by \u26CB Terrazzo. DO NOT EDIT!\n * ------------------------------------------- */";
|
|
29
|
+
declare function buildFileHeader(templatePath?: string): string;
|
|
30
|
+
declare const TERRAZZO_SLOT = "@terrazzo-slot;";
|
|
31
|
+
declare function applyTemplate(template: string, generatedTheme: string): string;
|
|
23
32
|
//#endregion
|
|
24
33
|
//#region src/index.d.ts
|
|
25
34
|
declare const FORMAT_ID = "tailwind";
|
|
26
35
|
declare function pluginTailwind(options: TailwindPluginOptions): Plugin;
|
|
27
36
|
//#endregion
|
|
28
|
-
export { FORMAT_ID, TailwindPluginOptions, pluginTailwind as default, flattenThemeObj };
|
|
37
|
+
export { FILE_HEADER, FORMAT_ID, TERRAZZO_SLOT, TailwindPluginOptions, applyTemplate, buildFileHeader, pluginTailwind as default, flattenThemeObj };
|
|
29
38
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/lib.ts","../src/index.ts"],"mappings":";;;UAAiB,qBAAA;;;AAAjB;;EAKE,QAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/lib.ts","../src/index.ts"],"mappings":";;;UAAiB,qBAAA;;;AAAjB;;EAKE,QAAA;EAOa;;;;EAFb,QAAA;EAIA;EAFA,KAAA,EAAO,MAAA;EAE2B;EAAlC,YAAA;IAAiB,OAAA;IAAiB,IAAA;EAAA;AAAA;;iBAIpB,eAAA,CAAgB,QAAA,EAAU,MAAA;EAA4B,IAAA;EAAgB,KAAA;AAAA;AAAA,cAuBzE,WAAA;AAAA,iBAIG,eAAA,CAAgB,YAAA;AAAA,cAUnB,aAAA;AAAA,iBAEG,aAAA,CAAc,QAAA,UAAkB,cAAA;;;cClDnC,SAAA;AAAA,iBAIW,cAAA,CAAe,OAAA,EAAS,qBAAA,GAAwB,MAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
1
3
|
import { FORMAT_ID as FORMAT_ID$1 } from "@terrazzo/plugin-css";
|
|
2
4
|
import { makeCSSVar } from "@terrazzo/token-tools/css";
|
|
3
5
|
|
|
@@ -20,18 +22,35 @@ function flattenThemeObj(themeObj) {
|
|
|
20
22
|
traverse(themeObj, []);
|
|
21
23
|
return result;
|
|
22
24
|
}
|
|
25
|
+
const FILE_HEADER = `/* -------------------------------------------
|
|
26
|
+
* Autogenerated by ⛋ Terrazzo. DO NOT EDIT!
|
|
27
|
+
* ------------------------------------------- */`;
|
|
28
|
+
function buildFileHeader(templatePath) {
|
|
29
|
+
if (templatePath) return `/* -------------------------------------------
|
|
30
|
+
* Autogenerated by ⛋ Terrazzo. DO NOT EDIT!
|
|
31
|
+
* template: ${templatePath}
|
|
32
|
+
* ------------------------------------------- */`;
|
|
33
|
+
return FILE_HEADER;
|
|
34
|
+
}
|
|
35
|
+
const TERRAZZO_SLOT = "@terrazzo-slot;";
|
|
36
|
+
function applyTemplate(template, generatedTheme) {
|
|
37
|
+
if (!template.includes(TERRAZZO_SLOT)) throw new Error(`Template must contain "${TERRAZZO_SLOT}" directive`);
|
|
38
|
+
return template.replace(/@terrazzo-slot;[\r\n]+/, `${generatedTheme.trimEnd()}\n\n`);
|
|
39
|
+
}
|
|
23
40
|
|
|
24
41
|
//#endregion
|
|
25
42
|
//#region src/index.ts
|
|
26
43
|
const FORMAT_ID = "tailwind";
|
|
27
44
|
function pluginTailwind(options) {
|
|
28
|
-
const filename = options?.filename ??
|
|
45
|
+
const filename = options?.filename ?? "tailwind-theme.css";
|
|
46
|
+
let cwd;
|
|
29
47
|
return {
|
|
30
48
|
name: "@terrazzo/plugin-tailwind",
|
|
31
49
|
enforce: "post",
|
|
32
50
|
config(config) {
|
|
33
51
|
if (!config.plugins.some((p) => p.name === "@terrazzo/plugin-css")) throw new Error("@terrazzo/plugin-css missing! Please install and add to the plugins array to use the Tailwind plugin.");
|
|
34
52
|
if (!options || !options.theme) throw new Error("Missing Tailwind `theme` option.");
|
|
53
|
+
cwd = new URL("./", config.outDir);
|
|
35
54
|
},
|
|
36
55
|
async transform({ getTransforms, setTransform }) {
|
|
37
56
|
const variants = [{
|
|
@@ -63,7 +82,7 @@ function pluginTailwind(options) {
|
|
|
63
82
|
}
|
|
64
83
|
},
|
|
65
84
|
async build({ getTransforms, outputFile }) {
|
|
66
|
-
const
|
|
85
|
+
const themeOutput = [];
|
|
67
86
|
const variants = { ".": [] };
|
|
68
87
|
for (const token of getTransforms({
|
|
69
88
|
format: FORMAT_ID,
|
|
@@ -74,15 +93,29 @@ function pluginTailwind(options) {
|
|
|
74
93
|
variants[mode].push(`${localID}: ${value};`);
|
|
75
94
|
}
|
|
76
95
|
for (const [variant, values] of Object.entries(variants)) {
|
|
77
|
-
|
|
78
|
-
for (const value of values)
|
|
79
|
-
|
|
96
|
+
themeOutput.push(variant === "." ? "@theme {" : `@variant ${variant} {`);
|
|
97
|
+
for (const value of values) themeOutput.push(` ${value}`);
|
|
98
|
+
themeOutput.push("}", "");
|
|
80
99
|
}
|
|
81
|
-
|
|
100
|
+
const generatedTheme = themeOutput.join("\n");
|
|
101
|
+
let finalOutput;
|
|
102
|
+
if (options.template) {
|
|
103
|
+
const templateUrl = new URL(options.template, cwd);
|
|
104
|
+
finalOutput = applyTemplate(fs.readFileSync(fileURLToPath(templateUrl), "utf8"), generatedTheme);
|
|
105
|
+
} else finalOutput = [
|
|
106
|
+
"@import \"tailwindcss\";",
|
|
107
|
+
"",
|
|
108
|
+
generatedTheme
|
|
109
|
+
].join("\n");
|
|
110
|
+
outputFile(filename, [
|
|
111
|
+
buildFileHeader(options.template),
|
|
112
|
+
"",
|
|
113
|
+
finalOutput
|
|
114
|
+
].join("\n"));
|
|
82
115
|
}
|
|
83
116
|
};
|
|
84
117
|
}
|
|
85
118
|
|
|
86
119
|
//#endregion
|
|
87
|
-
export { FORMAT_ID, pluginTailwind as default, flattenThemeObj };
|
|
120
|
+
export { FILE_HEADER, FORMAT_ID, TERRAZZO_SLOT, applyTemplate, buildFileHeader, pluginTailwind as default, flattenThemeObj };
|
|
88
121
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["FORMAT_CSS"],"sources":["../src/lib.ts","../src/index.ts"],"sourcesContent":["export interface TailwindPluginOptions {\n /**\n * Filename to output.\n * @default \"tailwind-theme.css\"\n */\n filename?: string;\n /** @see https://tailwindcss.com/docs/theme */\n theme: Record<string,
|
|
1
|
+
{"version":3,"file":"index.js","names":["FORMAT_CSS"],"sources":["../src/lib.ts","../src/index.ts"],"sourcesContent":["export interface TailwindPluginOptions {\n /**\n * Filename to output.\n * @default \"tailwind-theme.css\"\n */\n filename?: string;\n /**\n * Path to a template file. The template should contain `@terrazzo-slot;`\n * which will be replaced with the generated theme.\n */\n template?: string;\n /** @see https://tailwindcss.com/docs/theme */\n theme: Record<string, unknown>;\n /** Array of mapping variants to DTCG modes. */\n modeVariants?: { variant: string; mode: string }[];\n}\n\n/** Flatten an arbitrarily-nested object */\nexport function flattenThemeObj(themeObj: Record<string, unknown>): { path: string[]; value: string | string[] }[] {\n const result: { path: string[]; value: string | string[] }[] = [];\n\n function traverse(obj: Record<string, unknown>, path: string[]) {\n for (const [key, value] of Object.entries(obj)) {\n const newPath = [...path, key];\n if (typeof value === 'string' || Array.isArray(value)) {\n if (Array.isArray(value) && (value.length === 0 || value.some((v) => typeof v !== 'string'))) {\n throw new Error(\n `Invalid value at path \"${newPath.join('.')}\": expected a string or an array of strings, but got ${JSON.stringify(value)}`,\n );\n }\n result.push({ path: newPath, value });\n } else if (typeof value === 'object' && value !== null) {\n traverse(value as Record<string, unknown>, newPath);\n }\n }\n }\n\n traverse(themeObj, []);\n return result;\n}\n\nexport const FILE_HEADER = `/* -------------------------------------------\n * Autogenerated by ⛋ Terrazzo. DO NOT EDIT!\n * ------------------------------------------- */`;\n\nexport function buildFileHeader(templatePath?: string): string {\n if (templatePath) {\n return `/* -------------------------------------------\n * Autogenerated by ⛋ Terrazzo. DO NOT EDIT!\n * template: ${templatePath}\n * ------------------------------------------- */`;\n }\n return FILE_HEADER;\n}\n\nexport const TERRAZZO_SLOT = '@terrazzo-slot;';\n\nexport function applyTemplate(template: string, generatedTheme: string): string {\n if (!template.includes(TERRAZZO_SLOT)) {\n throw new Error(`Template must contain \"${TERRAZZO_SLOT}\" directive`);\n }\n // Replace slot and any following newlines (CRLF or LF) with theme + single newline\n return template.replace(/@terrazzo-slot;[\\r\\n]+/, `${generatedTheme.trimEnd()}\\n\\n`);\n}\n","import fs from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport type { Plugin } from '@terrazzo/parser';\nimport { FORMAT_ID as FORMAT_CSS } from '@terrazzo/plugin-css';\nimport { makeCSSVar } from '@terrazzo/token-tools/css';\nimport { applyTemplate, buildFileHeader, flattenThemeObj, type TailwindPluginOptions } from './lib.js';\n\nexport const FORMAT_ID = 'tailwind';\n\nexport * from './lib.js';\n\nexport default function pluginTailwind(options: TailwindPluginOptions): Plugin {\n const filename = options?.filename ?? 'tailwind-theme.css';\n let cwd: URL;\n\n return {\n name: '@terrazzo/plugin-tailwind',\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 Tailwind plugin.',\n );\n }\n\n if (!options || !options.theme) {\n throw new Error('Missing Tailwind `theme` option.');\n }\n\n // store cwd for template resolution (parent of outDir)\n cwd = new URL('./', config.outDir);\n },\n async transform({ getTransforms, setTransform }) {\n const variants = [{ variant: '.', mode: '.' }, ...(options?.modeVariants ?? [])];\n for (const { variant, mode } of variants) {\n const flatTheme = flattenThemeObj(options.theme);\n for (const { path, value } of flatTheme) {\n const tokens = getTransforms({\n format: FORMAT_CSS,\n id: value,\n mode,\n });\n for (const token of tokens) {\n let relName = token.id.split('.').at(-1)!;\n for (const subgroup of [...(Array.isArray(value) ? value : [value])]) {\n const match = subgroup.replace(/\\*.*/, '');\n relName = token.id.replace(match, '');\n }\n setTransform(token.id, {\n format: FORMAT_ID,\n localID: makeCSSVar(`${path.join('-')}-${relName.replace(/\\./g, '-')}`),\n value: typeof token.value === 'object' ? token.value['.']! : token.value,\n mode: variant, // ! <- not the original mode!\n });\n }\n }\n }\n },\n async build({ getTransforms, outputFile }) {\n const themeOutput: string[] = [];\n const variants: Record<string, string[]> = { '.': [] };\n for (const token of getTransforms({ format: FORMAT_ID, mode: '*' })) {\n const { localID, value, mode } = token;\n if (!variants[mode]) {\n variants[mode] = [];\n }\n variants[mode].push(`${localID}: ${value};`);\n }\n for (const [variant, values] of Object.entries(variants)) {\n themeOutput.push(variant === '.' ? '@theme {' : `@variant ${variant} {`);\n for (const value of values) {\n themeOutput.push(` ${value}`);\n }\n themeOutput.push('}', '');\n }\n const generatedTheme = themeOutput.join('\\n');\n\n // build the output combining theme and template\n let finalOutput: string;\n if (options.template) {\n const templateUrl = new URL(options.template, cwd);\n const templateContent = fs.readFileSync(fileURLToPath(templateUrl), 'utf8');\n finalOutput = applyTemplate(templateContent, generatedTheme);\n } else {\n finalOutput = ['@import \"tailwindcss\";', '', generatedTheme].join('\\n');\n }\n\n const header = buildFileHeader(options.template);\n outputFile(filename, [header, '', finalOutput].join('\\n'));\n },\n };\n}\n"],"mappings":";;;;;;;AAkBA,SAAgB,gBAAgB,UAAmF;CACjH,MAAM,SAAyD,EAAE;CAEjE,SAAS,SAAS,KAA8B,MAAgB;AAC9D,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,EAAE;GAC9C,MAAM,UAAU,CAAC,GAAG,MAAM,IAAI;AAC9B,OAAI,OAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,EAAE;AACrD,QAAI,MAAM,QAAQ,MAAM,KAAK,MAAM,WAAW,KAAK,MAAM,MAAM,MAAM,OAAO,MAAM,SAAS,EACzF,OAAM,IAAI,MACR,0BAA0B,QAAQ,KAAK,IAAI,CAAC,uDAAuD,KAAK,UAAU,MAAM,GACzH;AAEH,WAAO,KAAK;KAAE,MAAM;KAAS;KAAO,CAAC;cAC5B,OAAO,UAAU,YAAY,UAAU,KAChD,UAAS,OAAkC,QAAQ;;;AAKzD,UAAS,UAAU,EAAE,CAAC;AACtB,QAAO;;AAGT,MAAa,cAAc;;;AAI3B,SAAgB,gBAAgB,cAA+B;AAC7D,KAAI,aACF,QAAO;;gBAEK,aAAa;;AAG3B,QAAO;;AAGT,MAAa,gBAAgB;AAE7B,SAAgB,cAAc,UAAkB,gBAAgC;AAC9E,KAAI,CAAC,SAAS,SAAS,cAAc,CACnC,OAAM,IAAI,MAAM,0BAA0B,cAAc,aAAa;AAGvE,QAAO,SAAS,QAAQ,0BAA0B,GAAG,eAAe,SAAS,CAAC,MAAM;;;;;ACvDtF,MAAa,YAAY;AAIzB,SAAwB,eAAe,SAAwC;CAC7E,MAAM,WAAW,SAAS,YAAY;CACtC,IAAI;AAEJ,QAAO;EACL,MAAM;EACN,SAAS;EACT,OAAO,QAAQ;AACb,OAAI,CAAC,OAAO,QAAQ,MAAM,MAAM,EAAE,SAAS,uBAAuB,CAChE,OAAM,IAAI,MACR,wGACD;AAGH,OAAI,CAAC,WAAW,CAAC,QAAQ,MACvB,OAAM,IAAI,MAAM,mCAAmC;AAIrD,SAAM,IAAI,IAAI,MAAM,OAAO,OAAO;;EAEpC,MAAM,UAAU,EAAE,eAAe,gBAAgB;GAC/C,MAAM,WAAW,CAAC;IAAE,SAAS;IAAK,MAAM;IAAK,EAAE,GAAI,SAAS,gBAAgB,EAAE,CAAE;AAChF,QAAK,MAAM,EAAE,SAAS,UAAU,UAAU;IACxC,MAAM,YAAY,gBAAgB,QAAQ,MAAM;AAChD,SAAK,MAAM,EAAE,MAAM,WAAW,WAAW;KACvC,MAAM,SAAS,cAAc;MAC3B,QAAQA;MACR,IAAI;MACJ;MACD,CAAC;AACF,UAAK,MAAM,SAAS,QAAQ;MAC1B,IAAI,UAAU,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,GAAG;AACxC,WAAK,MAAM,YAAY,CAAC,GAAI,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAE,EAAE;OACpE,MAAM,QAAQ,SAAS,QAAQ,QAAQ,GAAG;AAC1C,iBAAU,MAAM,GAAG,QAAQ,OAAO,GAAG;;AAEvC,mBAAa,MAAM,IAAI;OACrB,QAAQ;OACR,SAAS,WAAW,GAAG,KAAK,KAAK,IAAI,CAAC,GAAG,QAAQ,QAAQ,OAAO,IAAI,GAAG;OACvE,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,MAAM,OAAQ,MAAM;OACnE,MAAM;OACP,CAAC;;;;;EAKV,MAAM,MAAM,EAAE,eAAe,cAAc;GACzC,MAAM,cAAwB,EAAE;GAChC,MAAM,WAAqC,EAAE,KAAK,EAAE,EAAE;AACtD,QAAK,MAAM,SAAS,cAAc;IAAE,QAAQ;IAAW,MAAM;IAAK,CAAC,EAAE;IACnE,MAAM,EAAE,SAAS,OAAO,SAAS;AACjC,QAAI,CAAC,SAAS,MACZ,UAAS,QAAQ,EAAE;AAErB,aAAS,MAAM,KAAK,GAAG,QAAQ,IAAI,MAAM,GAAG;;AAE9C,QAAK,MAAM,CAAC,SAAS,WAAW,OAAO,QAAQ,SAAS,EAAE;AACxD,gBAAY,KAAK,YAAY,MAAM,aAAa,YAAY,QAAQ,IAAI;AACxE,SAAK,MAAM,SAAS,OAClB,aAAY,KAAK,KAAK,QAAQ;AAEhC,gBAAY,KAAK,KAAK,GAAG;;GAE3B,MAAM,iBAAiB,YAAY,KAAK,KAAK;GAG7C,IAAI;AACJ,OAAI,QAAQ,UAAU;IACpB,MAAM,cAAc,IAAI,IAAI,QAAQ,UAAU,IAAI;AAElD,kBAAc,cADU,GAAG,aAAa,cAAc,YAAY,EAAE,OAAO,EAC9B,eAAe;SAE5D,eAAc;IAAC;IAA0B;IAAI;IAAe,CAAC,KAAK,KAAK;AAIzE,cAAW,UAAU;IADN,gBAAgB,QAAQ,SAAS;IAClB;IAAI;IAAY,CAAC,KAAK,KAAK,CAAC;;EAE7D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@terrazzo/plugin-tailwind",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.4",
|
|
4
4
|
"description": "Generate Tailwind v4 theme using DTCG design tokens.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -28,19 +28,19 @@
|
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
30
|
"tailwindcss": "^4.0.0",
|
|
31
|
-
"@terrazzo/cli": "^2.0.0-beta.
|
|
32
|
-
"@terrazzo/parser": "^2.0.0-beta.
|
|
33
|
-
"@terrazzo/plugin-css": "^2.0.0-beta.
|
|
34
|
-
"@terrazzo/token-tools": "^2.0.0-beta.
|
|
31
|
+
"@terrazzo/cli": "^2.0.0-beta.4",
|
|
32
|
+
"@terrazzo/parser": "^2.0.0-beta.4",
|
|
33
|
+
"@terrazzo/plugin-css": "^2.0.0-beta.4",
|
|
34
|
+
"@terrazzo/token-tools": "^2.0.0-beta.4"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@terrazzo/token-tools": "^2.0.0-beta.
|
|
37
|
+
"@terrazzo/token-tools": "^2.0.0-beta.4"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"tailwindcss": "^4.1.18",
|
|
41
|
-
"@terrazzo/cli": "^2.0.0-beta.
|
|
42
|
-
"@terrazzo/parser": "^2.0.0-beta.
|
|
43
|
-
"@terrazzo/plugin-css": "^2.0.0-beta.
|
|
41
|
+
"@terrazzo/cli": "^2.0.0-beta.4",
|
|
42
|
+
"@terrazzo/parser": "^2.0.0-beta.4",
|
|
43
|
+
"@terrazzo/plugin-css": "^2.0.0-beta.4"
|
|
44
44
|
},
|
|
45
45
|
"scripts": {
|
|
46
46
|
"build": "rolldown -c && attw --profile esm-only --pack .",
|